新しいレコードを 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)
);