Подтвердить что ты не робот

Каково максимальное количество столбцов, разрешенных в представлении 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

4b9b3361

Ответ 1

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

Похоже, что предел - 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.

Ответ 2

Вот ссылка Microsoft для получения подробной информации....

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

В соответствии с этим Microsoft...

Columns per nonwide table  | 1,024 
Columns per wide table     | 30,000

Ответ 3

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

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

как протестировать его:

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

Сохраненная процедура 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]ofCols
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.

Ответ 4

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

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

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