格式化的地方我哪里错了?

时间:2013-10-31 21:29:29

标签: sql-server tsql

试图用格式化来打破我的头......有人能指出我哪里出错了?

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 个答案:

答案 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)