3

私は得た

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
4

1 に答える 1

3

どうやら (とにかく私には)、やろうとしていることができないと言われたら、許可されていないことをしないようにコードを変更する必要があります。nz_test1特に、構成/再構成コードを、INSERT ステートメント ( 1 つ) で呼び出しているプロシージャの外部、たとえば別のストアド プロシージャに移動する必要がある可能性があります。おそらく挿入の前に、そのコードを個別に実行します(これは、明らかにしていない再構成で何を達成しようとしているかによって異なる場合があります)。

したがって、おそらく次のようなものです。

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トランザクション内でも呼び出さないようにしてください。それ以外の場合は、おそらく後者が呼び出されるトランザクションの前に、my_configoutsideを呼び出す必要があります。test_nz_tb3

于 2012-08-26T23:04:19.777 に答える