2012-08-24 44 views
3

內部使用我SQL服務器配置語句不能在用戶事務

CONFIG語句不能在用戶事務

中運行以下步驟2時使用。任何決議?謝謝。

步驟#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 

步驟#2:

create proc [dbo].[test_nz_tb3] 
as 
    create table #t (a varchar(2)) 

    insert into #t 
      exec nz_test1 
+0

歡迎來到Stack Overflow!請注意,標籤獨立。也就是說,用'sql'和'server'標記你的問題並不意味着你在談論MS SQL Server,它具有'sql-server'標記。 – Charles

回答

2

顯然(對我來說,反正),如果你被告知你不能做你正在嘗試做的,你需要改變你的代碼,以避免做不被允許的事情。特別是,您可能需要將配置/重新配置代碼移到您在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,可能在調用後者的交易之前。

+0

感謝您的回覆,這是非常真實的。 – thotwielder