2009-10-07 4 views
16

Mehr von einer kuriosen Frage, auf die ich keine schnelle Antwort finden kann.Wie lautet die maximale Anzahl an Spalten in der SQL Server 2008-Ansicht?

In SQL Server 2008 gibt es eine maximale Beschränkung für die Anzahl der Spalten in einer Ansicht zulässig sind? Aus dem MSDN-Artikel (siehe unten) sehe ich, dass es eine Grenze von 4096 Spalten pro Select-Anweisung gibt. Würde dies dann auf eine Ansicht angewendet werden?

Beispiel:

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

Würde ich auf 4096 Spalten in dieser Ansicht begrenzt werden?

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

+3

Mehr als wahrscheinlich, wenn Sie irgendwo in der Nähe der Grenze, Ihre Datenbank hat einige strukturelle Mängel kommen. – HLGEM

+2

Stimmen Sie in gewissem Sinne überein, aber Sie kennen den Kontext nicht. Wir bieten eine Schnittstelle mit einer vereinfachten Möglichkeit für Endbenutzer, ihre eigene Sicht auf bestimmte Tabellen und Spalten zu erstellen. Theoretisch könnte der Endbenutzer möglicherweise einige nicht zu verwaltende Ansichten erstellen. Ich möchte sicherstellen, dass wir ihnen die Möglichkeit geben, das zu tun, was sie brauchen, aber auch die Probleme auf ein Minimum reduzieren. – sugarcrum

Antwort

25

standardmäßig von einer autoritative Quelle zu finden, ich dachte, ich würde versuchen ...

Es scheint, dass die Grenze 1024 Spalten, das ist der Fall in SQLServer 9.0 (sowohl "Express" - als auch Enterprise-Versionen).

 
    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 zum Erstellen einer Ansicht mit mehr als 1024 Spalten :) – bogertron

+1

@bogertron Danke, das war Stunden langwieriger Bearbeitung! ... (glücklicherweise habe ich die Erstellung eines solchen Monsters geschrieben ;-)) – mjv

+1

mjv, v9 is 2005. Do you Zugriff auf SQL 2008, um denselben Test durchzuführen? –

2

Sogar in meinem SQL Server 2008 R2 (Version 10.5) gibt es ein 1024 Spaltenlimit für VIEWs. Tut mir leid, ich wünschte, es wäre nicht so.

Meine Kunden verwenden die Daten in Excel mithilfe von PivotTables und PivotCharts. Excel ist gut darin, wenn Sie es mit einer Data Warehouse-Ansicht füttern, die eine Zeile für alles und eine Spalte für alles enthält, einschließlich der Küchenspüle. Aber SQL Server kann keine Ansicht mit mehr als 1024 Spalten speichern, was ein echter Schmerz ist.

Jetzt muss ich meinen Kunden beibringen, die SQL-Anweisungen hinter den Datenverbindungseigenschaften in Excel manuell zu bearbeiten. Was ein Alptraum! Sehr wenige von ihnen bekommen es. Wir Programmierer sind clever, die Benutzer sind dumm, weshalb wir (jemand, der Microsoft zuhört) keine willkürlichen Grenzen in unsere Software einbauen sollten. Je.

+0

Dem stimme ich vollkommen zu, aber ich wette, es ist nicht so sehr, dass sie ein willkürliches Limit eingebaut haben, sondern mehr, dass das Limit aus den Tagen stammt, in denen Speicher und Computer VIEL begrenzter waren und sie das Limit nie überschritten haben. Das ist nur meine Vermutung. :) – eidylon

6

Sie nicht mehr als 1024 Spalten für eine Ansicht erstellen können.

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

wie es testen:

laufen diese beiden Verfahren für die Tabelle erstellt wird mit n die Anzahl der Spalten

Stored Procedure 1:

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 

Stored Procedure 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 

Erstellen Sie Tabelle 1 mit 1024 Spalten unter Verwendung von 1st SP.

Erstellen Sie Tabelle t2 mit 1024 Spalten unter Verwendung von 2. SP.

nun die folgende Abfrage ausführen:

Create view TestView 
As 
Select * from t1,t2 

Es Fehler folgende geben

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. 
Verwandte Themen