2009-10-07 4 views
16

Более любопытный вопрос: я не могу быстро найти определенный ответ.Каково максимальное количество столбцов, разрешенных в представлении SQL Server 2008?

В SQL Server 2008 существует максимальное ограничение на количество столбцов, разрешенных в представлении? Из статьи MSDN (ниже) я вижу, что существует ограничение в 4096 столбцов на выбор. Будет ли это применяться к представлению?

Пример:

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

ли я быть ограничен до 4096 столбцов в этом представлении?

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

+3

Более вероятно, если вы едете куда-нибудь близко к пределу, ваша база данных имеет некоторые структурные недостатки. – HLGEM

+2

Согласитесь в некотором смысле, но вы не знаете контекста. Мы предоставляем интерфейс с упрощенным способом для конечных пользователей создавать собственные представления определенных таблиц и столбцов. Теоретически конечный пользователь может потенциально создать некоторые неуправляемые представления. Я хочу убедиться, что мы даем им возможность делать то, что им нужно, но также свести к минимуму проблемы. – sugarcrum

ответ

25

По умолчанию найти авторитетный источник, я решил попробовать ...

Оказывается, что предел 1024 столбцов, что имеет место в SQLServer 9.0 (как «Экспресс», так и «Корпоративные версии»).

 
    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

+1

@bogertron Спасибо, что это были часы утомительного редактирования! ... (к счастью, я написал сценарий создания такого монстра ;-)) – mjv

+1

mjv, v9 is 2005. Вы иметь доступ к SQL 2008 для выполнения того же теста? –

2

Даже в моем SQL Server 2008 R2 (версия 10.5) существует ограничение на ширину столбца 1024 для VIEW. Извините, мне жаль, что это было не так.

Мои клиенты используют данные в Excel с использованием сводных таблиц и сводных диаграмм. Excel хорош в этом, ЕСЛИ вы кормите его представлением хранилища данных, которое содержит строку для всего и колонку для всего, включая кухонную раковину. Но SQL-сервер не может хранить представление с более чем 1024 столбцами, что является реальной болью.

Теперь я должен научить своих клиентов вручную редактировать инструкции SQL за свойствами подключения к данным в Excel. Какой кошмар! Очень немногие из них получают его. Нас программисты умны, пользователи глупы, поэтому мы должны (любой, кто слушает Microsoft ???) не создавать произвольные ограничения в нашем программном обеспечении. Когда-либо.

+0

Я полностью согласен, но я бы поспорил, что это не так много, что они построены в произвольном пределе, но больше того, что предел с тех пор, как память и компьютеры были НАМНОМ более ограничены, и они просто не лишались предела. Это только моя догадка. :) – eidylon

6

Вы не можете создать более 1024 столбцов для представления.

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

Как проверить:

запустить эти две процедуры для создания таблицы с п число столбцов

хранимых процедур 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 

хранимых процедур 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 

Создать таблицу t1 с 1024 столбцами с использованием 1-го SP.

Создать таблицу t2 с 1024 столбцами с использованием второго SP.

Теперь запустите следующий запрос:

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. 
Смежные вопросы