I am trying to execute some logic on a remote server using dynamic SQL, but when I set the dynamic SQL and try to call it nothing happens.. If I call the execution without making the execution dynamic it works without issue.
Not sure if what I am trying to do is allowed when passing OUTPUT values but figured I would see if anyone has any thoughts
DECLARE @sqlserver NVARCHAR(MAX) = ''
DECLARE @DBName NVARCHAR(MAX) = ''
DECLARE @parms NVARCHAR(MAX) = N'@output INT OUT', @output INT, @sql NVARCHAR(MAX) = '
;WITH DuplicateStatusCodes AS (
SELECT CodeTypeID FROM EDDSDBO.Code WHERE Name = ''Master'' OR Name = ''Unique'' OR Name = ''Duplicate''
)
SELECT ROW_NUMBER() OVER (ORDER BY CodeTypeID) RN, CodeTypeID INTO #temp
FROM DuplicateStatusCodes
GROUP BY CodeTypeID
HAVING COUNT(CodeTypeID) = 3
DECLARE @count INT = (SELECT COUNT(1) FROM #temp)
DECLARE @ctr INT = 1;
IF @count > 0
BEGIN
WHILE @ctr <= @count BEGIN
DECLARE @parms NVARCHAR(MAX) = N''@inneroutput INT OUT'';
DECLARE @inneroutput INT
DECLARE @codeartifact INT = (SELECT CodeTypeID FROM #temp WHERE RN <= 1 * @ctr and RN > 1 * (@ctr - 1))
DECLARE @duplicatestatuscheck NVARCHAR(MAX) = ''SELECT @inneroutput = COUNT(1) FROM eddsdbo.codeartifact_''+CAST(@codeartifact AS VARCHAR)+''''
EXEC sys.sp_executesql @duplicatestatuscheck, @parms, @inneroutput OUT
SELECT @output = @inneroutput
IF @inneroutput > 0
BREAK;
SET @ctr = @ctr + 1;
END
END
ELSE
BEGIN
SELECT @output = ''0''
END
'
DECLARE @linksql NVARCHAR(MAX) = '
DECLARE @sql NVARCHAR(MAX)
DECLARE @parms NVARCHAR(MAX) = N''@output INT OUT''
EXEC '+QUOTENAME(@sqlserver)+'.'+QUOTENAME(@DBName)+'.sys.sp_executesql @sql, @parms, @output = @output OUT'
--This does not work
EXEC sp_executesql @linksql, @parms, @output = @output
PRINT @output
--This works fine
EXEC [RemoteServerName].[DatabaseName].sys.sp_executesql @sql, @parms, @output = @output OUT ```
Appreciate any help