Reputation: 605
I want to create a dynamic query in SQL Server which will run on linked server. I am trying to do it as follows.
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
In the above script, I want to pass the value for @comp
dynamically. For that I tried setting input and output variable while executing SQL with sp_executesql
.
I am getting the following error
Syntax error in SQL statement. Syntax error line 1 at or after token .[10179].
Msg 7321, Level 16, State 2, Line 4
An error occurred while preparing the query "SELECT id from company where name = @comp" for execution against OLE DB provider "MSDASQL" for linked server "LINKSERVER12".
The error is happening at the dynamic query
N'SELECT @csid = id FROM OPENQUERY(LINKSERVER12,
''SELECT id from company where name = @comp'')'
I tried replacing @comp
in the SQL query with ''@comp''
, ''''@comp''''
with no luck. Any help is greatly appreciated.
Upvotes: 2
Views: 789
Reputation: 41
Just build the string query wihtout parameters.
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
Upvotes: 2