2009-10-07 75 views
16

更多的一個奇怪的問題,我似乎無法迅速找到一個明確的答案。什麼是SQL Server 2008視圖中允許的最大列數?

在SQL Server 2008中,視圖中允許的列數有最大限制嗎?從MSDN文章(下面)我看到,每個Select語句有4096個列的限制。這是否會應用於視圖?

實施例:

CREATE VIEW [dbo].[TestView] 
AS 
SELECT  Column1, Column2 FROM dbo.SomeTableName 

我會被限制爲4096列在此視圖中?

http://msdn.microsoft.com/en-us/library/ms143432.aspx

+3

更可能的,如果你是來任何地方接近極限,你的數據庫有一些結構性的缺陷。 – HLGEM 2009-10-07 20:38:29

+2

從某種意義上說是一致的,但是,你不知道上下文。我們提供了一個簡化的界面,讓最終用戶創建他們自己的某些表格和列的視圖。理論上,最終用戶可能會創建一些難以管理的觀點。我想確保我們給他們做他們需要的能力,但也要把問題降到最低。 – sugarcrum 2009-10-10 01:22:29

回答

25

通過尋找權威人士的默認情況下,我想我會嘗試...

看來,限制是1024列,即在SQLServer的9.0(的情況下「Express」和「Enterprise」版本)。

 
    The error message is: 
    Msg 4505, Level 16, State 1, Procedure wvTest, Line 3 
    CREATE VIEW failed because column 'Yo1' in view 'vwTest' 
         exceeds the maximum of 1024 columns. 
+7

Upvote用於創建超過1024列的視圖:) – bogertron 2009-10-15 19:51:38

+1

@bogertron感謝這是冗長乏味的編輯!(幸運的是我編寫了這樣一個怪物的製作;-)) – mjv 2009-10-15 20:01:24

+1

mjv,v9是2005.你有權訪問SQL 2008來做同樣的測試? – 2010-09-10 16:03:15

2

即使在我的SQL Server 2008 R2(版本10.5)中,VIEWs也有1024列限制。對不起,我希望不是這樣。

我的客戶使用數據透視表和數據透視圖消耗Excel中的數據。 Excel擅長這一點,如果您爲數據倉庫視圖提供數據倉庫視圖,該數據倉庫視圖包含一行所有內容以及一列所有內容(包括廚房水槽)。但是,SQL服務器不能存儲超過1024列的視圖,這是一個真正的痛苦。

現在我必須教我的客戶手動編輯Excel中數據連接屬性後面的SQL語句。什麼樣的惡夢!他們中很少有人得到它。我們的程序員很聰明,用戶很笨,這就是爲什麼我們應該(任何人都在聽微軟???)不能在我們的軟件中構建任意限制。永遠。

+0

我完全同意,但我敢打賭,沒有那麼多,他們建立在任意的限制,但更多的限制是從內存和計算機更加有限的時代開始,他們從來沒有超出限制。這只是我的猜測。 :) – eidylon 2013-08-01 03:34:03

6

你不能爲一個視圖中創建超過1024列。

http://msdn.microsoft.com/en-us/library/ms143432.aspx

如何測試:

運行這兩個程序使用列

存儲過程1的n個創建表:

CREATE Proc [dbo].[CreateTableWithNColumnsPrefixX] 
(@TableName nvarchar(100),@NumofCols int) 
AS 
BEGIN 
DECLARE @i INT 
DECLARE @MAX INT 
DECLARE @SQL VARCHAR(MAX) 
DECLARE @j VARCHAR(10) 
DECLARE @len int 
SELECT @i=1 
SELECT @[email protected] 
SET @SQL='CREATE TABLE ' + @TableName + '(' 
WHILE @i<[email protected] 
BEGIN 
select @j= cast(@i as varchar) 
SELECT @SQL= @SQL+'X'[email protected] +' NVARCHAR(500) , ' 
SET @i = @i + 1 
END 
select @len=len(@SQL) 
select @SQL = substring(@SQL,0,@len-1) 
SELECT @SQL= @SQL+ ')' 
exec (@SQL) 
END 
GO 

存儲過程2:

CREATE Proc [dbo].[ CreateTableWithNColumnsPrefixA] 
(@TableName nvarchar(100),@NumofCols int) 
AS 
BEGIN 

DECLARE @i INT 
DECLARE @MAX INT 
DECLARE @SQL VARCHAR(MAX) 
DECLARE @j VARCHAR(10) 
DECLARE @len int 
SELECT @i=1 
SELECT @[email protected] 
SET @SQL='CREATE TABLE ' + @TableName + '(' 

WHILE @i<[email protected] 

BEGIN 
select @j= cast(@i as varchar) 
SELECT @SQL= @SQL+'A'[email protected] +' NVARCHAR(500) , ' 
SET @i = @i + 1 
END 
select @len=len(@SQL) 

select @SQL = substring(@SQL,0,@len-1) 


SELECT @SQL= @SQL+ ')' 

exec (@SQL) 

END 

GO 

使用1st SP創建具有1024列的表t1。

使用2nd SP創建帶有1024列的表t2。

現在運行下面的查詢:

Create view TestView 
As 
Select * from t1,t2 

它會給以下錯誤

Msg 4505, Level 16, State 1, Procedure TestView, Line 3 
CREATE VIEW failed because column 'A1' in view 'TestView' exceeds the maximum of 1024 columns. 
相關問題