就像这个问题中的海报(Sybase Error Implicit Conversion from datatype 'VARCHAR' to 'INT' not allowed)一样,我有一个脚本在尝试存储它们之前显式地将所有字符转换为int。实际上,该脚本在测试Sybase服务器上运行完美。但是当我在生产中运行它时,我得到了可怕的错误:
Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed. Use the CONVERT function to run this query.
一个复杂因素:我无法直接在生产服务器上运行脚本。我必须使用内部实用程序,该实用程序旨在记录所有生产更新以实现数据安全性目的。它有问题,所以问题可能是我的脚本触发的一些边缘情况 - 在这种情况下,我只是放弃并手动插入记录。但是我想确定我没有明显缺少的东西。
declare @Year int, @Bill_Run_No int
select @Year = 2015, @Bill_Run_No = 3501
-- Add a new year's worth of Bill_Run_Cntl records
declare @BegDate datetime, @EndDate datetime, @CurBillRunNo int, @MonthName varchar(3), @CurMonth int
/* Start with January and run for 12 months */
select @CurMonth = 1
while (@CurMonth < 13)
begin
select @CurBillRunNo = @Bill_Run_No + @CurMonth - 1
select @BegDate = CONVERT(datetime, convert(varchar, @Year) + '-' + convert(varchar, @CurMonth) + '-01')
select @EndDate = DATEADD(MM, 1, @BegDate)
select @MonthName = datename(MM, @BegDate)
INSERT INTO REVDB..Bill_Run_Cntl
(Bill_Run_No, Begin_Run_DtTm, End_Run_DtTm,
Bill_Run_Desc,
Bill_Period,
Complete_Flag, Bill_Frequency, Bill_SW_Maint, Sales_Tax_Pass )
select @CurBillRunNo, @BegDate, @EndDate,
@MonthName + ' ' + convert(varchar, @Year) + ' Monthly',
convert(varchar, @Year) + RIGHT('00' + CONVERT(varchar, @CurMonth), 2),
NULL, 'P', NULL, 'A'
select @CurMonth = @CurMonth + 1
end
编辑:根据请求,这是表定义的相关部分。 *字段允许空值。
Column_name Type Length
Bill_Run_No int 4
Begin_Run_DtTm datetime 8
End_Run_DtTm datetime 8
Bill_Run_Desc char 30
Bill_Period char 6
Complete_Flag* char 1
Bill_Frequency* char 1
Bill_SW_Maint* smallint 2
Sales_Tax_Pass* char 1