Как правильно передать строку в качестве параметра - PullRequest
0 голосов
/ 26 июня 2019

Я хочу передать 'H18E142' как строку в хранимой процедуре.Этот параметр затем будет использоваться в динамическом операторе выбора SQL, но у меня возникла ошибка, указав, что «H18E142» является недопустимым именем столбца.

Я поместил «H18E142» в коде SQL напрямую, и он работает, но когдаЯ передаю абсолютное значение непосредственно в динамический SQL

- Это оператор выбора - Значение char (7), передаваемое в переменную @EIRCODE, равно '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

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Попробуйте это

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
0 голосов
/ 26 июня 2019

Строковые литералы должны быть заключены в одинарные кавычки.Таким образом, ваша строка запроса должна выглядеть примерно так:

'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 .

...