更多一个奇怪的问题我似乎无法迅速找到一个明确的答案.
在SQL Server 2008中,视图中允许的列数是否有最大限制?从MSDN文章(下面)我看到每个Select语句有4096列的限制.这会被应用于视图吗?
例:
CREATE VIEW [dbo].[TestView]
AS
SELECT Column1, Column2 FROM dbo.SomeTableName
Run Code Online (Sandbox Code Playgroud)
在此视图中,我会限制为4096列吗?
mjv*_*mjv 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.
这是Microsoft链接的完整详细信息....
http://msdn.microsoft.com/en-us/library/ms143432.aspx
根据这个微软...
Columns per nonwide table | 1,024
Columns per wide table | 30,000
Run Code Online (Sandbox Code Playgroud)
您不能为视图创建超过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
Run Code Online (Sandbox Code Playgroud)
存储过程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
Run Code Online (Sandbox Code Playgroud)
使用1st SP创建包含1024列的表t1.
使用2nd SP创建1024列的表t2.
现在运行以下Query:
Create view TestView
As
Select * from t1,t2
Run Code Online (Sandbox Code Playgroud)
它会给出以下错误
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.
Run Code Online (Sandbox Code Playgroud)