SQL Server错误代码245(将varchar转换为int时转换失败)

时间:2017-07-24 08:39:23

标签: sql-server database stored-procedures

我的问题是我无法将varchar(4000)类型变量连接到存储过程中进行查询。

我尝试了许多方法来实现它,不同的组合与引号但没有机会。

这是我的程序:

@sirketkodu varchar(30) , 
@degerler varchar(4000),
@ORA_KULLANICI_KODU varchar(30) ,
@ORA_KULLANICI_TIPI varchar(30) ,
@ORA_KULLANICI_BIRIMI varchar(30) ,
@ORA_KULLANICI_ROLU varchar(50) ,
@ORA_KULLANICI_SUBE varchar(30) ,
@ORA_KULLANICI_SIRKET varchar(30) ,
@ORA_KULLANICI_UZMAN varchar(30) ,
@ORA_KULLANICI_EPOSTA varchar(50) ,
@ORA_BASVURU_KESIN_KOSUL varchar(1000),
@ORA_TARIH varchar(30)
AS
BEGIN
    SET NOCOUNT ON;
    SET DATEFORMAT DMY;
BEGIN 
    UPDATE sirket 
    SET bolgeler = '' + CAST(@degerler AS VARCHAR(4000)) + '',
        kullanici = @ORA_KULLANICI_KODU,
        tarih  = @ORA_TARIH
    WHERE kod = @sirketkodu
END

这行代码:

bolgeler ='' + CAST(@degerler AS VARCHAR(4000)) + ''

造成了这个问题。我尝试了以下方法:

bolgeler = @degerler,
bolgeler = '@degerler',
bolgeler = '' + @degerler + '',
bolgeler = CAST(@degerler AS VARCHAR(4000)),
bolgeler = ''' + @degerler + ''',

我的@degerler数据是php数组的序列化字符串,如下所示:

string(23) "a:1:{s:2:"gd";s:1:"E";}"

,错误是:

  

将varchar转换为int

时转换失败

由于

1 个答案:

答案 0 :(得分:1)

据我所知,你的转化太多了。 你有变量

@degerler varchar(4000),

你正试图这样做:

bolgeler ='' + cast(@degerler as varchar(4000)) + '',

为什么需要空的varchars?

现在问题在于,@degerler中有一些值无法转换为int,就像那样简单。

试试这个:

declare @degerler varchar(4000) = '123'
declare @bolgeler int
set @bolgeler = '' + cast(@degerler as varchar(4000)) + ''
select @bolgeler

结果将是123

现在试试这个:

declare @degerler varchar(4000) = '123A'
declare @bolgeler int
set @bolgeler = '' + cast(@degerler as varchar(4000)) + ''
select @bolgeler

现在你将收到这个错误。

但我怀疑你没有向我们展示所有的代码,因为你正在做不必要的转换。您可以将varchar放入int中,即使没有像这样的转换:

declare @degerler varchar(4000) = '123'
declare @bolgeler int
set @bolgeler = @degerler 
select @bolgeler

因此@degerler中的值无法转换为int,或者您没有向我们显示所有代码。

另一种可能性是,您正在更新的表sirket中的一个字段是int类型,并且您试图在其中放置一个无法转换的varchar值。

要获得更好的答案,您必须提供样本数据和两种表格结构。