我有一个存储过程,用于将新记录插入到我的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)
);