2014-09-30 4 views
0

Я ХП, которые отправить строку ж/котировки работает нормально:SQL Server в строке

ALTER PROCEDURE [dbo].[Proc] @Store char(5) 
AS 
BEGIN 
SELECT * FROM OPENQUERY(Server, 'SELECT * FROM T WHERE Store = ''MA009'' GROUP BY Store') 
END 

Как вставить @Store в OpenQuery строке? ниже не работает

ALTER PROCEDURE [dbo].[Proc] @Store char(5) 
AS 
BEGIN 
SELECT * FROM OPENQUERY(Server, 'SELECT * FROM T WHERE Store = '''+ @Store + ''' GROUP BY Store') 
END 

ответ

1

Согласно MSDN,

OPENQUERY не принимает переменные для своих аргументов.

Однако, вы можете попробовать следующее:

DECLARE @SQL varchar(8000), @Store char(5) 
SELECT @Store = 'MA009' 
SELECT @SQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM T WHERE Store =''''' + @Store + ''''' GROUP BY Store '')' 
EXEC (@SQL) 

ИЛИ вы можете использовать sp_executesql хранимой процедуры

Чтобы избежать многоуровневые кавычки, используйте код, который похож на следующий пример:

DECLARE @Store char(5) 
SELECT @Store = 'MA009' 
EXEC MyLinkedServer.master.dbo.sp_executesql 
     N'SELECT * FROM T WHERE Store = @var', 
     N'@var char(5)', 
     @Store 
+0

Спасибо, первый пример, работающий, но застревание с кавычками вы можете мне помочь, если добавить дополнительные цитаты? – Maxrem

0

Это не возможно использовать переменные в OPENQUERY. Но вы можете использовать переменную со следующим обходным решением:

DECLARE @test nvarchar(MAX); 

SET @test = 'MyStringValue'; 
DECLARE @query nvarchar(max) = 
    'SELECT * FROM OPENQUERY(adamm_db,''Select * 
             FROM databaseName.schemaName.table 
             WHERE id = ''''' + @test + ''''''')' 
EXEC(@query) 
Смежные вопросы