我有一个myNumber varchar(50)
列的表,其中存储的值为导致零的值,如'0000001111'
。varchar值的转换溢出了一个int列,而REPLACE
现在我想替换领先'0000'
与'12'
,如'12001111'
。
我想这样的说法:
UPDATE myDB.dbo.myTable
SET myNumber = REPLACE(myNumber, '0000', '12')
WHERE myNumber LIKE '0000%'
但是,这导致了错误:为什么这个错误造成的,如果所有的列都varchar
Msg 248, Level 16, State 1, Procedure trplist_for_Inserted_Updated_Deleted Line 80
The conversion of the varchar value "831116399075' overflowed an int column.
?
我该怎么办?
修订
对不起球员,错误的原因,它是表触发。
这里是触发逻辑
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER TRIGGER [dbo].[trplist_for_Inserted_Updated_Deleted]
ON [dbo].[pList]
FOR Insert, Update, Delete
NOT FOR REPLICATION
AS
SET NOCOUNT ON
Declare @Result_check Int
Declare @NameTable nvarchar(30)
set @NameTable='plist'
Declare @FieldName nvarchar(30)
set @FieldName='ChangeTime'
Declare @Columns varbinary(MAX)
set @Columns=COLUMNS_UPDATED()
Execute CheckChangeFields @Columns, @NameTable, @FieldName, @Result_check
if @Result_check = 1
begin
return
end
set @FieldName='DateTimeInArchive'
Execute CheckChangeFields @Columns, @NameTable, @FieldName, @Result_check
if @Result_check = 1
begin
return
end
Declare @stateRecord Int
IF EXISTS(SELECT * FROM inserted)
IF EXISTS(SELECT * FROM deleted)
BEGIN
SET @stateRecord = 1 --Update
--PRINT 'Update'
END
ELSE
BEGIN
--PRINT 'Insert'
SET @stateRecord = 0 --Insert
END
ELSE
BEGIN
--PRINT 'Is DELETE'
IF EXISTS(SELECT * FROM deleted)
BEGIN
SET @stateRecord = 2 --Delete
--PRINT 'DELETE'
END
ELSE
BEGIN
SET @stateRecord = -1
--PRINT 'No DELETE'
END
END
IF @stateRecord = -1
RETURN
declare @id_value int
Declare @status_record int
declare @inn int
declare @Company int
declare @tabnumber varchar(50)
if (@stateRecord in (0,1))
BEGIN
--inserted or updated
--проверка на изменение поля StatusRecord
declare @Result_check_status_record int
if Exists(select * from Deleted where checksum(StatusRecord) In (select Checksum(StatusRecord) from Inserted))
select @Result_check_status_record= 1--одинаковые
else
select @Result_check_status_record= 0--разные
DECLARE cursor_inserted_trpList_Inserted_Updated_Delete_logs CURSOR LOCAL FOR select id, StatusRecord, INN, TabNumber, Company from inserted
OPEN cursor_inserted_trpList_Inserted_Updated_Delete_logs
FETCH NEXT FROM cursor_inserted_trpList_Inserted_Updated_Delete_logs INTO @id_value, @status_record,@inn, @tabnumber, @Company
WHILE @@FETCH_STATUS = 0
BEGIN
if (@inn<>'')
begin
if Exists(select id from plist where (id<> @id_value) and ([email protected]))
begin
RollBack
RAISERROR('Данный INN уже имеется в базе', 16,2)
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
return
end
end
if (@tabnumber<>'') and (@tabnumber<>'0')
begin
if @Company = 0
begin
if Exists(select id from plist where (id<> @id_value) and ([email protected]) and (Company<=0))
begin
RollBack
RAISERROR('Данный TabNumber уже имеется в базе', 16,2)
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
return
end
end
else
begin
if Exists(select id from plist where (id<> @id_value) and ([email protected]) and ([email protected]))
begin
RollBack
RAISERROR('Данный TabNumber уже имеется в базе в данном подразделении', 16,2)
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
return
end
end
end
if ((@status_record&1)>0)
begin
if (@Result_check_status_record=0)
begin
Execute GustIsRelease @id_value
update guest set IDNoFace=0 where [email protected]_value
Declare @dmtm datetime
if Exists(select id from plist where ([email protected]_value) and (IsNull(DateTimeInArchive, '')=''))
begin
Update plist set DateTimeInArchive=GetDate() where ([email protected]_value) and (IsNull(DateTimeInArchive, '')='')
end
end
end
else
begin
if Exists(select id from plist where ([email protected]_value) and (IsNull(DateTimeInArchive, 1)<>1))
Update plist set DateTimeInArchive=Null where ([email protected]_value) and (IsNull(DateTimeInArchive, 1)<>1)
end
FETCH NEXT FROM cursor_inserted_trpList_Inserted_Updated_Delete_logs INTO @id_value, @status_record,@inn, @tabnumber, @Company
END
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
END
if (@stateRecord=2)
BEGIN
DECLARE cursor_inserted_trpList_Inserted_Updated_Delete_logs CURSOR LOCAL FOR select id from deleted
OPEN cursor_inserted_trpList_Inserted_Updated_Delete_logs
FETCH NEXT FROM cursor_inserted_trpList_Inserted_Updated_Delete_logs INTO @id_value
WHILE @@FETCH_STATUS = 0
BEGIN
if Exists(select id from pmark where [email protected]_value)
begin
RollBack
RAISERROR('У сотрудника остались активные пароли', 16,2)
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
return
end
if Exists(select id from guest where [email protected]_value)
begin
RollBack
RAISERROR('Сотрудник привязан к посетителю', 16,2)
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
return
end
update guest set IDNoFace=0 where [email protected]_value
update guest set ReceiveListId=0 where [email protected]_value
FETCH NEXT FROM cursor_inserted_trpList_Inserted_Updated_Delete_logs INTO @id_value
END
CLOSE cursor_inserted_trpList_Inserted_Updated_Delete_logs
END
看起来像你的领域是整数,数量比整数 – FLICKER
的能力有什么更大trplist_for_inserted_updated_deleted?看起来你在桌上有一个失败的触发器。你能发布触发逻辑吗?您发布的查询没有任何问题。 –
此值'831116399075'似乎不包含前导零。你确定'UPDATE'语句是导致问题的原因吗? –