我有以下存储过程,根据传递的服务器名称动态删除链接服务器
CREATE PROCEDURE [Common].[sprocServiceConfig_DropLinkedServer]
(@ServerName NVARCHAR(MAX))
AS
BEGIN
DECLARE @SQLQuery NVARCHAR(MAX)
SELECT
@SQLQuery = N'master.sys.sp_dropserver ''' + @ServerName+ ''' , ''droplogins'' '
EXECUTE @SQLQuery
END
我无法动态执行sp_dropserver
。我收到了错误
找不到存储过程sp_dropserver
我可以在非动态模式下执行它,如
EXEC master.sys.sp_dropserver 'Test-PC' , 'droplogins'
请问任何想法?
答案 0 :(得分:0)
对于动态查询,您需要使用sp_executesql
。
尝试从
更改 @SQLQuery = N'master.sys.sp_dropserver ''' + @ServerName+ ''' , ''droplogins'' '
EXECUTE @SQLQuery
要
@SQLQuery = N'EXEC master.sys.sp_dropserver ''' + @ServerName+ ''' , ''droplogins'' '
EXECUTE sp_executesql @SQLQuery
答案 1 :(得分:0)
CREATE PROCEDURE [Common].[sprocServiceConfig_DropLinkedServer]
(@ServerName VARCHAR(MAX))
AS
BEGIN
DECLARE @SQLQuery VARCHAR(MAX)
SELECT @SQLQuery = ''''+@ServerName+ ''' , ''droplogins'''
EXEC master.sys.sp_dropserver @SQLQuery
END
答案 2 :(得分:0)
你只需要将它传递给大括号:
EXECUTE (@SQLQuery)