2014-09-30 58 views
0

我已經存儲的過程,其發送列W /報價工程確定:SQL服務器變量字符串

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

如何在OPENQUERY字符串插入@Store?下面不工作

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 2014-09-30 12:11:31

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)