Can any body give the suggestions.Why I am getting this error.
System.Data.SqlClient.SqlException: The INSERT statement conflicted with the CHECK constraint «CK_GL10000_TRXDATE__56701F76″. The conflict occurred in database «TWO», table «dbo.GL10000», column ‘TRXDATE’.
This is my stored procedure :
SqlCommand myCommand1 = new SqlCommand("taGLTransactionHeaderInsert", strcon);
myCommand1.CommandType = CommandType.StoredProcedure;
myCommand1.CommandText = "taGLTransactionHeaderInsert";
myCommand1.Parameters.Add("@I_vBACHNUMB", SqlDbType.Char).Value = GLHdr.BACHNUMB;
myCommand1.Parameters.Add("@I_vREFRENCE", SqlDbType.Char).Value = "ExcelImport";
myCommand1.Parameters.Add("@I_vTRXDATE", SqlDbType.DateTime).Value = GLHdr.TRXDATE;
Table definition:
CREATE TABLE [dbo].[GL10000](
[PSTGSTUS] [smallint] NOT NULL,
[LASTUSER] [char](15) NOT NULL,
[LSTDTEDT] [datetime] NOT NULL,
[USWHPSTD] [char](15) NOT NULL,
[TRXTYPE] [smallint] NOT NULL
/* More columns? not included in script that OP added */
)
GO
ALTER TABLE [dbo].[GL10000] WITH CHECK ADD CHECK
((datepart(hour,[RVRSNGDT])=(0) AND datepart(minute,[RVRSNGDT])=(0)
AND datepart(second,[RVRSNGDT])=(0) AND datepart(millisecond,[RVRSNGDT])=(0)))
GO
ALTER TABLE [dbo].[GL10000] WITH CHECK ADD CHECK
((datepart(hour,[Tax_Date])=(0) AND datepart(minute,[Tax_Date])=(0)
AND datepart(second,[Tax_Date])=(0) AND datepart(millisecond,[Tax_Date])=(0)))
GO
ALTER TABLE [dbo].[GL10000] WITH CHECK ADD CHECK
((datepart(day,[TIME1])=(1) AND datepart(month,[TIME1])=(1)
AND datepart(year,[TIME1])=(1900)))
GO
ALTER TABLE [dbo].[GL10000] WITH CHECK ADD CHECK
((datepart(hour,[TRXDATE])=(0) AND datepart(minute,[TRXDATE])=(0)
AND datepart(second,[TRXDATE])=(0) AND datepart(millisecond,[TRXDATE])=(0)))
GO
ALTER TABLE [dbo].[GL10000] ADD CONSTRAINT
[DF__GL10000__DEX_ROW__540C7B00] DEFAULT (getutcdate()) FOR [DEX_ROW_TS]
GO
0 / 0 / 0
Регистрация: 15.12.2018
Сообщений: 2
1
15.12.2018, 16:09. Показов 7477. Ответов 6
Наипростейшая табличка:
T-SQL | ||
|
Объявлена с наипростейшими ограничениями:
T-SQL | ||
|
И выводит совершенно дикую ошибку, просто жизнь и голову себе сломал в поисках этой поганой мелочи всё портящей если такая вообще есть, может sql 2017 какой-то другой синтаксис имеет…
Сообщение 547, уровень 16, состояние 0, строка 3
Конфликт инструкции INSERT с ограничением CHECK «CK__Hotels__Catering__01D345B0». Конфликт произошел в базе данных «Tour_agency «, таблица «dbo.Hotels», column ‘Catering_services’.
Выполнение данной инструкции было прервано.
0
Время на прочтение
2 мин
Количество просмотров 27K
Кто-то задал такой вопрос:
Мне нужно создать таблицу group со столбцом code. Можно ли добавить ограничение на столбец, которое допускало бы только буквенные символы (D, M, O, P или T) с последующими двумя цифровыми символами?
Ему ответили:
Вы не можете этого сделать обычным способом — MS SQL Server поддерживает проверку ограничений, но лишь в виде мин/макс значения INT, длины строки и т.п. То, что вам нужно, — проверка на основе регулярного выражения, которую SQL Server не поддерживает. Теоретически можно сделать .NET вставку, развернуть на SQL Server и заставить его использовать такую проверку — нетривиальная задача.
Попробуем разобраться
Не смотря на то, что SQL server не поддерживает регулярные выражения в полной мере, но поставленную выше задачу можно без проблем решить и на T-SQL. Вот так будет выглядеть это регулярное выражение
[DMOPT][0-9][0-9]
Оно допускает только буквенные символы (D, M, O, P или T) с последующими двумя цифровыми символами. Ладно, хватит разговоров, давайте перейдем к коду
Создадим таблицу
CREATE TABLE blatest(code char(3))
Добавим проверку ограничения
ALTER TABLE blatest ADD CONSTRAINT ck_bla
CHECK (code like '[DMOPT][0-9][0-9]' )
GO
Теперь несколько инструкций для вставки данных
INSERT blatest VALUES('a12') --недопустимое значение
INSERT blatest VALUES('M12') --допустимое значение
INSERT blatest VALUES('D12') --допустимое значение
INSERT blatest VALUES('DA1') --недопустимое значение
Как видите, мы дважды получили сообщение об ошибке
Сообщение 547, уровень 16, состояние 0, строка 1
Конфликт инструкции INSERT с ограничением CHECK "ck_bla". Конфликт произошел в базе данных "Test", таблица "dbo.blatest", столбец 'code'.
Выполнение данной инструкции было прервано.
Если вы хотите выполнить вставку D12, а не d12, т.е. нужна чувствительность к регистру, тогда нужно создать такое ограничение
(code like '[DMOPT][0-9][0-9]' COLLATE SQL_Latin1_General_CP1_CS_AS )
Все, что потребовалось изменить — добавить параметр сортировки SQL_Latin1_General_CP1_CS_AS.
Чтобы узнать, что дает этот параметр, выполните следующий запрос
SELECT * FROM ::fn_helpcollations()
WHERE name = 'SQL_Latin1_General_CP1_CS_AS'
Вот, что вернул запрос в описании
Latin1-General, case-sensitive, accent-sensitive, kanatype-
insensitive, width-insensitive for Unicode Data, SQL Server Sort Order 51 on Code Page 1252 for non-Unicode Data
Давайте создадим новое ограничение, но прежде нам нужно удалить старое
ALTER TABLE blatest DROP CONSTRAINt ck_bla
GO
Теперь создаем новое и проверяем
ALTER TABLE blatest ADD CONSTRAINT ck_bla
CHECK (code LIKE '[DMOPT][0-9][0-9]' COLLATE SQL_Latin1_General_CP1_CS_AS )
GO
INSERT blatest VALUES('D12') --допустимое значение
INSERT blatest VALUES('d12') --недопустимое значение
Вставка значения D12 будет успешной, а d12 — нет.
Как видите, использовать регулярные выражения в ограничениях можно и никакой триггер в данном случае не нужен.
The solution for above subject line exists in many links and have come across all links and find no solution for my issue.
here is my query :
INSERT INTO PatientPatternElements (PatientPatternsID, ASEventID, LocationID, EffectiveDate, EffectiveDateEnd, WorkloadStartDate, WorkloadEndDate)
SELECT DISTINCT PatientPatterns.ID,
@hl7event_id,
@default_locationid,
@hl7event_effective_date,
@hl7event_effective_date,
@hl7event_effective_date,
@hl7event_effective_date
FROM PatientPatternElements
INNER JOIN PatientPatterns
ON PatientPatternElements.PatientPatternsID = PatientPatterns.ID
WHERE PatientPatterns.PatientEncounterID = @patient_encounter_id
AND PatientPatterns.Visit = @patient_encounter_visit
---------------------
-- Error Checking
----------------------
SET @SysError = @@error
IF @SysError != 0
BEGIN
SET @iError = 23063
SET @strErrorMsg = 'Error Applying Manual Discharge Event, Error: ' + cast(@SysError AS varchar(256)) + ' encounter_id=' + cast(@patient_encounter_id as varchar(64))
GOTO ERROR
END
It is just a part of my code of my stored procedure.
WORKFLOW
It is happening in one of the version in client testing environment and client has one more version and the flow works without any issues.
when we are trying to run a record manually it is throwing an error in one of our log table and throws below message:
THREAD 4: ApplyPatientPatternEvents: Recovering from SQL exception: The INSERT statement conflicted with the CHECK constraint "CK_PatientPatternElements_Location".
The conflict occurred in database "db_name", table "dbo.PatPatternElements".
and this
Rolling back Transaction. spHL7ApplyPatientPatternEvents: Error Applying Manual Discharge Event, Error: 547 encounter_id=20
as I said earlier it is happening in only one version, stored procedure is identical in both the versions, making hard to find out the issue.
there is nothing logged in Eventviewer and tracing sql profiler also not helping much since the SP spHL7ApplyPatientPatternEvents
never show up in profiler.
Anyone can give an idea what exactly has happened ?
This is the query of constraint.
ALTER TABLE [dbo].[PatientPatternElements] WITH CHECK ADD CONSTRAINT [CK_PatientPatternElements_Location] CHECK (([LocationID] IS NULL AND [LevelOfCareGroupID] IS NOT NULL OR [LocationID] IS NOT NULL AND [LevelOfCareGroupID] IS NULL))
GO
ALTER TABLE [dbo].[PatientPatternElements] CHECK CONSTRAINT [CK_PatientPatternElements_Location]
GO
- Remove From My Forums
-
Question
-
Please help i am new to asp.net and sql server 2005 and only when i try insert a new value into rating and press add review button is get this error at line 35 reviewAdder.ExecuteNonQuery(); and it says The INSERT statement conflicted with the CHECK constraint «CK_ProductReview_Rating». The conflict occurred in database «AdventureWorks», table «Production.ProductReview», column ‘Rating’.
The statement has been terminated.My code is this
public class Reviews
{
public Reviews()
{
}
public System.Collections.IEnumerable GetReviews(int ProductID)
{
System.Data.SqlClient.SqlDataAdapter reviewAdapter = new System.Data.SqlClient.SqlDataAdapter
(«SELECT ProductID, ReviewerName, EmailAddress, ReviewDate, Rating, Comments FROM Production.ProductReview WHERE ProductID=» + ProductID, ConfigurationManager.ConnectionStrings[«AdvWorks»].ConnectionString);
DataSet dsReviews = new DataSet(«Reviews»);
reviewAdapter.Fill(dsReviews, «ProductReview»);
return ((dsReviews.Tables[«ProductReview»]) as System.ComponentModel.IListSource).GetList();}
public void AddReview(string ProductID, string ReviewerName, string EmailAddress, string ReviewDate, string Rating, string Comments)
{
System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings[«AdvWorks»].ConnectionString);
sqlConn.Open();
System.Data.SqlClient.SqlCommand reviewAdder = new System.Data.SqlClient.SqlCommand(
«INSERT Production.ProductReview (ProductID, ReviewerName, EmailAddress, ReviewDate, Rating, Comments)»
+ » VALUES (‘» + ProductID + «‘,'» + ReviewerName + «‘,'» + EmailAddress + «‘,'» + DateTime.Now + «‘,'» + Rating + «‘,'» + Comments + «‘)», sqlConn);
reviewAdder.ExecuteNonQuery();}
}It is unable to do the insertion only that time the error is raised…Initaially page runs and i can enter values only when i update it shows error..Please help me
Answers
-
Based on the error you are receiving it would appear that the value(s) are outside of the specified range. You might try using profiler to assure the values.
The below is t-sql for disregarding the check constraint and then to re-enable the constraint:
CREATE TABLE temp( col1 INT CONSTRAINT ck_val CHECK(col1 > 1) ); GO INSERT temp VALUES(0); GO --ERROR occurs so alter table to ignore the constraint ALTER TABLE temp NOCHECK CONSTRAINT ck_val; GO --INSERT the same value and the value is allowed INSERT temp VALUES(0); GO --Re-enable the constraint ALTER TABLE temp CHECK CONSTRAINT ck_val; GO --Error occurs again INSERT temp VALUES(0); GO --Clean up DROP TABLE temp; GO
Hope this helps
David Dye
-
Marked as answer by
Monday, April 5, 2010 3:42 AM
-
Marked as answer by