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)