我有一个用于将新记录插入我的 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)
);