我想在存储过程中将'H18E142'作为字符串传递。然后,该参数将在动态SQL select语句中使用,但出现错误,提示“ H18E142”是无效的列名。
我已经将'H18E142'直接放置在SQL代码中,并且可以正常工作,但是当我将绝对值直接传递到动态SQL中时
-这是select语句 -在变量@EIRCODE中传递的char(7)值为'A63DH00'
Supply
返回的预期结果是为传递的邮政编码填充以下字段:
-当前季度 -地址第一行 -地址行2 -地址行3 -地址行4
答案 0 :(得分:0)
字符串文字需要用单引号引起来。因此,您的查询字符串组成应类似于:
'SELECT ''' + @quarterForDbName + ''' AS Quarter, ADDR_LINE_1, ADDR_LINE_2, ADDR_LINE_3, ADDR_LINE_4 FROM EDB_'+ @quarterForDbName +'.dbo.POSTAL_ADDRESS PA WHERE PA.EIRCODE = ''' + @EIRCODE + ''''
您已经使用@quarterForDbName
进行了此操作,因此您似乎一般都知道。
但是,是的,正如Panagiotis Kanavos已经评论的那样,在不同数据库中拆分的气味有点。因此,重新设计整个概念的方法可能就是 real 解决方案。
答案 1 :(得分:0)
尝试一下
DECLARE @query VARCHAR(MAX)
DECLARE @quarterForDbName VARCHAR(MAX)
DECLARE @EIRCODE VARCHAR(MAX)
SET @EIRCODE='1'
SET @quarterForDbName='1'
SET @query='SELECT ''' + @quarterForDbName + ''' AS Quarter, ADDR_LINE_1, ADDR_LINE_2, ADDR_LINE_3, ADDR_LINE_4 FROM EDB_'
+ @quarterForDbName +'.dbo.POSTAL_ADDRESS PA WHERE PA.EIRCODE = ' + @EIRCODE
SELECT @query