Sql 过程sp_dropserver的动态执行

Sql 过程sp_dropserver的动态执行,sql,sql-server,Sql,Sql Server,我有以下存储过程,它根据传递的服务器名动态删除链接服务器 CREATE PROCEDURE [Common].[sprocServiceConfig_DropLinkedServer] (@ServerName NVARCHAR(MAX)) AS BEGIN DECLARE @SQLQuery NVARCHAR(MAX) SELECT @SQLQuery = N'master.sys.sp_dropserver ''' + @ServerName+

我有以下存储过程,它根据传递的服务器名动态删除链接服务器

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\u dropserver
。我得到了错误

找不到存储过程sp_dropserver

我可以在非动态模式下执行它,比如

EXEC master.sys.sp_dropserver 'Test-PC' , 'droplogins' 

有什么想法吗?

对于动态查询,您需要使用
sp\u executesql

试着从

 @SQLQuery = N'master.sys.sp_dropserver  ''' + @ServerName+ ''' ,  ''droplogins'' '

 EXECUTE @SQLQuery


您只需在大括号中传递它:

EXECUTE (@SQLQuery)

虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
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 
EXECUTE (@SQLQuery)