繁体   English   中英

使用参数将过程存储到链接服务器-错误

[英]Stored procedure to Linked server with parameters - Error

我正在尝试创建到链接服务器的存储过程,该输入参数@ServerName是我使用的链接服务器的名称。 在此过程中,我还声明了要从Dynamic SQL Query和行中获取哪个值的参数。

创建PROC sp_Version @ServerName varchar(30)

声明@Ver varchar(10)
exec('从openquery中选择@Ver((+ @ServerName +',``SELECT SUBSTRING(@@ VERSION,22,7)= @Ver'''))

当我执行我的sp时,我收到一条错误消息:

“必须声明标量变量“ @Ver”。”

请你帮助我好吗?

我不确定@Ver的值(也许是OUTPUT参数)的目的是什么? 如果是这样,则语法为:

CREATE PROC GetVersion @ServerName varchar(30), @Ver nvarchar(500) OUTPUT AS

    DECLARE @SQL nvarchar(MAX);

    SET @SQL = N'SELECT @dVer = Version' + NCHAR(10) +
               N'FROM OPENROWSET(''SQLNCLI'',' + NCHAR(10) +
               N'                ' + QUOTENAME('Server=' + @ServerName + ';Trusted_Connection=YES;','''') + ',' +NCHAR(10) +
               N'                ''SELECT @@VERSION AS Version'');';

    PRINT @SQL;
    EXEC sp_executesql @SQL, N'@dVer nvarchar(500) OUTPUT', @dVer = @Ver OUTPUT;


GO

DECLARE @ver varchar(500)

EXEC GetVersion 'YourServerName', @ver OUTPUT;

PRINT @ver;
GO

DROP PROC GetVersion;

注意,首先,如建议的那样,我没有使用sp_前缀。 我还使用了sp_executesql而不是简单的EXEC (这通常是更好的做法,因为您可以像我一样对动态SQL进行参数化设置),并使用QUOTENAME尝试避免注入。

我已经遇到过几次这种情况。 尝试这个:

CREATE PROC sp_Version @ServerName varchar(30)
as
Declare @Ver varchar(10)

DECLARE @SqlCommand nvarchar(MAX)

SET @SqlCommand = 'SELECT @Ver2 = SUBSTRING (@@VERSION, 22, 7) '

DECLARE @sp_executesql VARCHAR(100)
SET @sp_executesql = @ServerName + '.master.sys.sp_executesql'
EXEC @sp_executesql @SqlCommand, N'@Ver2 nvarchar(10) out', @Ver out
SELECT @Ver

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM