SQL Server 2008 View中允许的最大列数是多少?

时间:2009-10-07 20:01:19

标签: sql-server-2008

更多一个好奇的问题我似乎无法迅速找到明确的答案。

在SQL Server 2008中,视图中允许的列数是否有最大限制?从MSDN文章(下面)我看到每个Select语句有4096列的限制。这会被应用到视图吗?

示例:

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

在此视图中,我是否会限制为4096列?

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

4 个答案:

答案 0 :(得分:25)

默认找到权威来源,我想我会尝试......

似乎限制为1024列,就是SQLServer 9.0中的情况(“Express”和“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.

答案 1 :(得分:7)

以下是Microsoft链接以获取完整的详细信息....

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

根据这个微软......

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

答案 2 :(得分:6)

您无法为视图创建超过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 @MAX=@NumofCols
SET @SQL='CREATE TABLE ' + @TableName + '('
WHILE @i<=@MAX
BEGIN
select @j= cast(@i as varchar)
SELECT @SQL= @SQL+'X'+@j  +' 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 @MAX=@NumofCols
SET @SQL='CREATE TABLE ' + @TableName + '('

WHILE @i<=@MAX

BEGIN
select @j= cast(@i as varchar)
SELECT @SQL= @SQL+'A'+@j  +' 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

使用1st SP创建包含1024列的表t1。

使用2nd SP创建包含1024列的表t2。

现在运行以下查询:

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.

答案 3 :(得分:2)

即使在我的SQL Server 2008 R2(版本10.5)中,VIEW上也有1024列限制。对不起,我希望不是这样。

我的客户使用数据透视表和数据透视图在Excel中使用数据。 Excel很擅长这个,如果你用数据仓库视图提供它,其中包含一行的所有内容和一个包含厨房水槽的列。但SQL服务器无法存储超过1024列的视图,这真的很痛苦。

现在我必须教我的客户手动编辑Excel中数据连接属性背后的SQL语句。什么样的恶梦!很少有人能得到它。我们的程序员很聪明,用户很笨,这就是为什么我们应该(任何人都在听微软???)没有在我们的软件中建立任意限制。如初。