1

试图用格式打破我的头......有人可以指出我哪里出错了吗?

declare @jsql varchar(200)
declare @casenbr varchar(12)
declare @TransactionNbr int

set @casenbr = '200812345'
set @TransactionNbr = 7455678
SET @JimsSql =  'EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr ''''' + @CaseNbr + ''''', + ' + @TransactionNbr 

print @jsql

我得到错误

将 varchar 转换为 int 时出错

4

4 回答 4

2

SQL 在组合字符串和数字时是不宽容的,因此您需要先将整数转换为字符串,可能只是将其转换为varchar

SET @JimsSql =  '...blah...' + cast(@TransactionNbr as varchar(10))

你的引号也到处都是 - 在一个字符串中,两个单引号被转义为一个,所以你需要注意你在哪里。我相信您正在寻找的是:

SET @JimsSql =  'EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr ''' + @CaseNbr + ''', ' + cast(@TransactionNbr  as varchar(10))

这将打印出:

EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr '200812345', 7455678

也就是说,如果您打算执行此语句而不是仅仅打印它,那么您就是在为 SQL 注入敞开大门,就好像您一开始没有参数化它一样。您可能想查看sp_executesql

于 2013-10-31T21:40:27.847 回答
0

varchar 是...

'EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr ''''' + @CaseNbr + ''''', + '

...而 int 是...

@TransactionNbr 

您也需要转换@TransactionNbr为 varchar:

SET @JimsSql =  'EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr ''''' + @CaseNbr + ''''', + ' + cast(@TransactionNbr as varchar(56))
于 2013-10-31T21:36:47.510 回答
0
declare @jsql nvarchar(MAX)
declare @casenbr varchar(12)
declare @TransactionNbr int

set @casenbr = '200812345'
set @TransactionNbr = 7455678
SET @jsql =  'EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr ''' + @CaseNbr + ''',  ' + CAST(@TransactionNbr AS NVARCHAR) + ''

print @jsql

结果

EXEC JIMSdb.dbo.spItsLoadCaseDocumentsFromJIMS_TransNbr '200812345',  7455678
于 2013-10-31T21:38:27.633 回答
0

尝试在您的 @jsql 查询中包含以下内容,以确保它被 SQL 接受为 var

 cast(@TransactionNbr as varchar) 
于 2013-10-31T21:39:31.363 回答