0

新しいレコードを FOLDER テーブルに挿入するためのストアド プロシージャがあります。この sproc は、xml 文字列を処理する関数を使用します。

ALTER PROCEDURE [dbo].[usp_FolderUploader]
@xmlString xml
AS
BEGIN TRANSACTION
BEGIN TRY
    Insert into mydb.dbo.FOLDER
    ...350 columns...
    Select
    ...350 columns...
    from mydb.dbo.myfunction(@xmlString)
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
        ROLLBACK TRANSACTION
        DECLARE @Msg NVARCHAR(MAX)  
        SELECT @Msg=ERROR_MESSAGE() 
END CATCH

(列が非常に多いことはわかっていますが、それはまさにその通りです。そして、彼らは私の前にこのテーブルを使用していたので、簡単に変更することはできません。)

私の問題は、sproc の実行時にエラーが発生することです。

クエリの最適化中に、クエリ プロセッサがスタック領域を使い果たしました。クエリを簡略化してください。

そこで、350列のうち300列を一時的にコメントアウトしてみました。そして、それはうまくいきました。ここで使用できる列の数に制限はありますか? ある場合、使用できる列の最大数はいくつですか? ありがとう。

編集

myfunction のコードは次のとおりです。

CREATE FUNCTION [dbo].[myfunction]
(
    @varXML AS XML
)
RETURNS TABLE
AS
RETURN
(
    SELECT Child.value('RECID[1]', 'BIGINT') 'RECID',
    ...the other 349 columns...
    FROM @varXML.nodes('DocumentElement/XMLTable') EMP(Child)
);
4

0 に答える 0