Как использовать openquery в хранимой процедуре?

#sql-server #stored-procedures #openquery

#sql-сервер #хранимые процедуры #openquery

Вопрос:

Я должен передать параметры на связанный сервер, и я должен использовать open query, у меня есть код, как показано ниже:

 DECLARE @TSQL varchar(8000), @VAR char(2)

SELECT @VAR = 'CA'

SELECT @TSQL = 'SELECT * INTO newtable FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = '''''   @VAR   ''''''')'
EXEC (@TSQL)
  

Теперь мне нужно использовать его в хранимой процедуре, но я получаю неоднозначную синтаксическую ошибку. Как я могу использовать его в хранимой процедуре?

Комментарии:

1. Почему вы используете динамический SQL? Почему бы просто не SELECT * INTO NewTable FROM OPENQUERY(MyLinkedServer, 'SELECT * FROM pubs.dbo.authors WHERE state = ' QUOTENAME(@Var, '''') '');

2. потому что вместо pubs.dbo.authors я использую такую функцию, как: authors ( null , «»‘ @ToDate «»‘ , null, null,null,null, null, null,null,null,null,null,null,null,null,null,3, null )

3. Опубликуйте полное сообщение об ошибке — все. И вы не можете отлаживать динамический sql, который создает ваш код, не видя, что он создал, не так ли? Поэтому опубликуйте содержимое @TSQL и изучите его самостоятельно.

Ответ №1:

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

 CREATE PROCEDURE [Name]

AS

DECLARE @TSQL varchar(8000), @VAR char(2)
SET @VAR = 'CA'

SET @TSQL = 'SELECT * INTO newtable FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = '   @VAR   ' '')'

EXEC (@TSQL)