2009-10-07 10 views
16

Bardziej ciekawy pytanie Nie mogę szybko znaleźć konkretnej odpowiedzi.Jaka jest maksymalna liczba kolumn dozwolona w widoku SQL Server 2008?

W SQL Server 2008 istnieje ograniczenie liczby kolumn dopuszczalnych w widoku? Z artykułu MSDN (poniżej) widzę, że istnieje limit 4096 kolumn na instrukcję Select. Czy następnie zastosuje się do widoku?

Przykład:

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

byłbym ograniczony do 4096 kolumn w tym widoku?

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

+3

więcej niż prawdopodobne, jeśli pochodzą wszędzie blisko granicy, czy baza danych ma kilka wad konstrukcyjnych. – HLGEM

+2

Zgadzam się w pewnym sensie, ale nie znasz kontekstu. Dostarczamy interfejs z uproszczonym sposobem dla użytkowników końcowych, aby utworzyć własny widok niektórych tabel i kolumn. Teoretycznie użytkownik końcowy mógłby potencjalnie utworzyć niecodzienne widoki. Chcę mieć pewność, że damy im możliwość robienia tego, czego potrzebują, ale także ograniczyć problemy do minimum. – sugarcrum

Odpowiedz

25

Domyślnie znajdowaniu autorytatywnego źródła, pomyślałem, że spróbuję ...

Wydaje się, że limit wynosi 1024 kolumny, że ma to miejsce w SQLServer 9.0 (obie wersje "Express" i 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

Awans do tworzenia widoku z więcej niż 1024 kolumnami :) – bogertron

+1

@bogertron Dzięki, że były godziny żmudnej edycji! ... (na szczęście napisałem scenariusz stworzenia takiego potwora ;-)) – mjv

+1

mjv, v9 to 2005. Czy mieć dostęp do SQL 2008, aby wykonać ten sam test? –

2

Nawet w moim SQL Server 2008 R2 (wersja 10.5) istnieje limit 10 kolumn na VIEW. Przepraszam, szkoda, że ​​tak nie było.

Moi klienci pobierają dane w programie Excel za pomocą tabel przestawnych i przestawnych. Excel jest w tym dobry, JEŚLI karmisz go widokiem hurtowni danych, który zawiera wiersz dla wszystkiego i kolumnę dla wszystkiego, w tym zlewu kuchennego. Ale serwer SQL nie może przechowywać widoku z więcej niż 1024 kolumnami, co jest prawdziwym problemem.

Teraz muszę nauczyć moich klientów ręcznie edytować instrukcje SQL za właściwościami połączenia danych w programie Excel. Co za koszmar! Bardzo niewielu z nich to rozumie. My programiści jesteśmy sprytni, użytkownicy są głupi, dlatego powinniśmy (każdy słuchający Microsoft ???) nie budować w arbitralnych granicach naszego oprogramowania. Zawsze.

+0

Całkowicie się zgadzam, ale założyłbym się, że to nie tyle, że zbudowano je w arbitralnym limicie, ale więcej, że granica pochodzi z czasów, gdy pamięć i komputery były DUŻO bardziej ograniczone, i po prostu nigdy nie wybrali limitu. To tylko moje przypuszczenie. :) – eidylon

6

Nie można utworzyć więcej niż 1024 kolumn dla widoku.

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

jak to test:

uruchomić te dwa procedura tworzenia tabeli w n liczba kolumn

przechowywane Procedura 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 

przechowywane Procedura 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 

Utwórz tabelę t1 z 1024 kolumnami przy użyciu 1. SP.

Utwórz tabelę t2 z 1024 kolumnami za pomocą 2nd SP.

Teraz uruchom następujące zapytanie:

Create view TestView 
As 
Select * from t1,t2 

To daje następujący błąd

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. 
Powiązane problemy