我的问题是我无法将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
时转换失败
由于
答案 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值。
要获得更好的答案,您必须提供样本数据和两种表格结构。