试图用格式化来打破我的头......有人能指出我哪里出错了?
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
时出错
答案 0 :(得分: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。
答案 1 :(得分: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))
答案 2 :(得分: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
答案 3 :(得分:0)
尝试在@jsql查询中包含以下内容,以确保它被SQL接受为var
cast(@TransactionNbr as varchar)