#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)