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