繁体   English   中英

如何正确将字符串作为参数传递

[英]How to correctly pass string as a parameter

我想在存储过程中将'H18E142'作为字符串传递。 然后,该参数将在动态SQL select语句中使用,但是我出现错误,提示“ H18E142”是无效的列名。

我直接在SQL代码中放置了“ H18E142”,它可以工作,但是当我在动态SQL中直接将其作为绝对值传递时

-这是select语句-在变量@EIRCODE中传递的char(7)值为'A63DH00'

     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  

返回的预期结果是为传递的邮政编码填充的以下字段:

-当前季度-地址行1-地址行2-地址行3-地址行4

字符串文字需要用单引号引起来。 因此,您的查询字符串组成应类似于:

'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 ,因此您似乎@quarterForDbName已经知道了。

但是,是的,正如Panagiotis Kanavos已经评论的那样,在不同数据库中拆分的气味有点。 因此,重新设计您的整个概念可能是真正的解决方案。

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM