过程sp_dropserver

时间:2017-03-09 10:17:45

标签: 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+ ''' ,  ''droplogins'' '

    EXECUTE @SQLQuery
END 

我无法动态执行sp_dropserver。我收到了错误

  

找不到存储过程sp_dropserver

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

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

请问任何想法?

3 个答案:

答案 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)