SQL Server CONFIG语句不能在用户事务中使用。

3

我收到了下面的过程2时出现了错误:

CONFIG语句不能在用户事务内使用

有什么解决办法吗?谢谢。

过程 #1:

CREATE PROC [dbo].[nz_test1]
as
   EXEC sp_configure 'show advanced option', 1
   RECONFIGURE WITH OVERRIDE
   EXEC sp_configure 'xp_cmdshell', 1
   EXEC sp_configure 'ad hoc distributed queries', 1  
   RECONFIGURE WITH OVERRIDE

select 1

第二步骤:
create proc [dbo].[test_nz_tb3]
as
    create table #t (a varchar(2))

    insert into #t
           exec nz_test1

欢迎来到 Stack Overflow!请注意,标签是独立的。也就是说,将您的问题打上“SQL”和“Server”的标签并不意味着您在谈论 MS SQL Server,该标签应为“sql-server”。 - Charles
1个回答

3
显然(至少在我看来),如果有人告诉你不能做你正在尝试的事情,你需要更改代码以避免做你不被允许做的事情。特别是,你可能需要将配置/重新配置代码从你在INSERT语句中调用的过程(nz_test1)中移出,放到另一个存储过程中。分别运行这些代码,可能要在插入之前运行(这可能取决于你尝试使用重新配置实现什么目标,你没有透露)。
所以,也许像这样:
CREATE PROCEDURE dbo.my_config
AS
    EXEC sp_configure 'show advanced option', 1;
    RECONFIGURE WITH OVERRIDE;
    EXEC sp_configure 'xp_cmdshell', 1;
    EXEC sp_configure 'ad hoc distributed queries', 1;
    RECONFIGURE WITH OVERRIDE;
GO
CREATE PROCEDURE dbo.nz_test1
AS
    SELECT 1 AS Value;
GO
CREATE PROCEDURE dbo.test_nz_tb3
AS
    EXEC dbo.my_config;
    CREATE TABLE #t (a varchar(10));
    INSERT INTO #t
        EXEC dbo.nz_test1;

请确保不要在事务中调用test_nz_tb3。否则,您需要在调用后者的事务之前在test_nz_tb3外部调用my_config


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接