0

我有一个用于将新记录插入我的 FOLDER 表的存储过程。此存储过程使用处理 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

(我知道,列太多了,但事实就是如此。他们在我之前就一直在使用这张桌子,所以我不能只是改变它。)

我的问题是运行存储过程时出现错误:

查询处理器在查询优化期间耗尽了堆栈空间。请简化查询。

所以我尝试暂时注释掉 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