我想在SQL Server中创建一个将在链接服务器上运行的动态查询。我试着这样做。
USE [MYDB]
GO
DECLARE @company AS nvarchar(50);
DECLARE @id nvarchar(MAX);
DECLARE @query nvarchar(MAX);
SET @company = 'mycompany.com';
SET @query = N'SELECT @csid = id FROM OPENQUERY(LINKSERVER12,
''SELECT id from company where name = @comp'')';
EXECUTE sp_executesql @company_query, N'@comp nvarchar(50), @csid
nvarchar(MAX) OUTPUT', @comp = @company,@csid = @id OUTPUT
在上面的脚本中,我想动态传递@comp
的值。为此,我尝试在使用sp_executesql
执行SQL时设置输入和输出变量。
我收到以下错误
SQL语句中的语法错误。在令牌处或之后的语法错误行1 [10179]。
Msg 7321,Level 16,State 2,Line 4
准备查询时发生错误"来自公司的SELECT id,其中name = @comp"对OLE DB提供程序执行" MSDASQL"对于链接服务器" LINKSERVER12"。
错误发生在动态查询
N'SELECT @csid = id FROM OPENQUERY(LINKSERVER12,
''SELECT id from company where name = @comp'')'
我尝试使用' @comp
,'@comp''
替换SQL查询中的''''@comp''''
,但没有运气。非常感谢任何帮助。
答案 0 :(得分:0)
只需使用参数构建字符串查询。
USE [companyDB]
GO
DECLARE
@companyName AS nvarchar(50)
,@id nvarchar(MAX)
,@query NVARCHAR(MAX)
SET @companyName = 'AMAZON'
DECLARE @idTable TABLE
(
id INT
)
--Repace Server, UID and PWD
SET @query =
N'SELECT
[id]
FROM OPENROWSET
(
N''SQLNCLI''
,N''Server=10.111.1.111;UID=username;PWD=password123;''
,N''SELECT [id]
FROM [companyDB]
WHERE [name] = '''''+@companyName+'''''''
)'
INSERT INTO @idTable
EXECUTE (@query)
SELECT TOP 1
@id = id
FROM @idTable