我遇到了一個商業案例,在該案例中,我需要超出32級的嵌套SP調用,這是SQL Server的限制。有人可以說是否有可能增加這個限制?超過SQL Server SP調用嵌套級別32
1
A
回答
4
否,32是限制:Maximum Capacity Specifications for SQL Server
32是一個深調用棧;我以前從未達到過這個限制。它表明你應該尋找一種替代方法。
+1
+1。在SQL中,我幾乎看不到深度超過3-4的調用堆棧。這就是說有些人似乎認爲sql server是一個應用服務器。我有人有緩慢的SQL存儲過程......感謝每一行的外部Web服務調用;) – TomTom 2011-02-28 06:22:51
1
如果您達到此限制,那麼您應該使用udfs或CTE作爲您的遞歸代碼。如果它不是遞歸的,那真是糟糕的設計。
我從來沒有低於約4深,包括觸發更
0
遞歸調用可能是一個很好的特點,尤其是當你的輸出XML,你需要獲得在格式爲XML相等子節點父母。解決方法是使用存儲過程處理父/子關係,但缺少更復雜/冗餘的代碼。假設你有:
create table Users (UserID int, Name nvarchar(50), ManagerID int null)
insert into Users (1, 'Carl', null)
insert into Users (2, 'Tom', 1)
insert into Users (3, 'John', 1)
和
create function GetUser(@UserID int)
returns XML as
begin
declare @xml XML
SET @xml = (
SELECT [UserID] "User/@UserID"
, [Name] "User/@Name"
FROM Users
WHERE [UserID] = @UserID
FOR XML PATH(''), TYPE
)
return @xml
end
要獲得所有管理人員的XML:
create proc GetAllManagers() as
begin
set nocount on;
SELECT dbo.GetUser([UserID])
FROM Users
WHERE [ManagerID] IS NULL
FOR XML PATH(''), TYPE, root('Managers')
end
現在的問題。如果對每個經理來說,我想要所有屬於經理的用戶呢?我想我的功能,能夠自稱:
alter function GetUser(@UserID int, @IsIncludeChildren bit)
returns XML as
begin
declare @xml XML
SET @xml = (
SELECT [UserID] "User/@UserID"
, [Name] "User/@Name"
, (SELECT dbo.GetUser([UserID], 0)) "User/Children"
FROM Users
WHERE [ManagerID] = @UserID AND @IsIncludeChildren = 1
FOR XML PATH(''), TYPE
)
return @xml
end
,並呼籲這只是
alter proc GetAllManagers() as
begin
set nocount on;
SELECT dbo.GetUser([UserID], 1)
FROM Users
WHERE [ManagerID] IS NULL
FOR XML PATH(''), TYPE, root('Managers')
end
但是,這是因爲嵌套限制不可能的。因此,解決方法是(使用第一功能):
alter proc GetAllManagers() as
begin
set nocount on;
SELECT
dbo.GetUser([UserID])
, (
SELECT dbo.GetUser([UserID])
FROM Users
WHERE [ManagerID] = [Users].[UserID]
FOR XML PATH(''), TYPE
) "User/Children"
FROM Users as [Users]
WHERE [ManagerID] IS NULL
FOR XML PATH(''), TYPE, root('Managers')
end
這是不是太糟糕,但如果你有很多的迴歸用戶數據等程序,你必須建立在所有特效的父/子關係,而不是在一個單一的功能!
那麼,微軟呢,修復它!
相關問題
- 1. SQL級別嵌套SELECT
- 2. 觸發器嵌套級別超出了?
- 3. 嵌套級別
- 4. 超級嵌套表
- 5. 當嵌套級別超過3時,展開嵌套RealmProxyObject失去值
- 6. SQL Server - 需要根據嵌套級別返回數據
- 7. 使用JSON嵌套級別
- 8. 你可以嵌套System.Data.Entity.Include超過2個級別?
- 9. 如果語句超過嵌套級別,則無法添加?
- 10. 嵌套Java內部類超過一個級別是否合理?
- 11. JSON文本或Perl結構超過最大嵌套級別
- 12. 雙嵌套級別的SQL查詢
- 13. 使用SQL Server 2014超過了最大存儲過程,函數,觸發器或視圖嵌套級別(限制32)
- 14. 超過了最大存儲過程,函數,觸發器或視圖嵌套級別(限制32)。
- 15. 超過了最大存儲過程,函數,觸發器或視圖嵌套級別(限制32)
- 16. XSD工具跳過嵌套級別
- 17. 超級CSV嵌套豆
- 18. SQL Server SELECT嵌套
- 19. 如何過濾某個嵌套級別的嵌套字典?
- 20. 級別的SQL Server
- 21. 調用SQL Server存儲過程在SQL Server中創建新的SP對象
- 22. CakePHP嵌套級別錯誤
- 23. xamDataGrid - 縮進嵌套級別
- 24. 在NSDictionary中嵌套級別
- 25. SQL Server和超級鏈接
- 26. 使用嵌套的存儲過程結果調用存儲過程Sql Server 2008
- 27. 最大函數嵌套級別laravel 5刀片多級嵌套
- 28. 錯誤調用通過LINQ SQL SP時
- 29. 嵌套組在SQL Server
- 30. 在SQL Server中嵌套表
我建議,其時間來審查您的業務案例實施,並選擇一個不違反技術範圍使用的新的。 – 2011-02-28 06:17:31