簡體   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