2009-10-07 7 views
16

好奇心の質問の多く私はすぐに明確な答えを見つけることができないようです。SQL Server 2008のビューで許可される列の最大数は何ですか?

SQL Server 2008には、ビューで許可される列の数に最大限の制限がありますか? MSDNの記事(下)から、Select文あたり4096個のColumnsの制限があることがわかりました。これはビューに適用されますか?

例:

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場合であることが表示されます「Express」とエンタープライズ版の両方)。

 
    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

1024以上の列を持つビューを作成するためのUpvote – bogertron

+1

@bogertron退屈な編集の時間があったことをありがとうございました!...(幸いにも私はそのようなモンスターの作成をスクリプト化しました;-)) – mjv

+1

mjv、v9は2005です。同じテストを行うためにSQL 2008にアクセスできますか? –

2

SQL Server 2008 R2(バージョン10.5)でも、VIEWには1024の列制限があります。申し訳ありませんが、そうではなかったと思います。

私の顧客は、ピボットテーブルとピボットグラフを使用してExcelでデータを消費します。キッチンシンクを含め、すべての行とすべての列を含むデータウェアハウスビューを使用してExcelにフィードすると、Excelは良好です。しかし、SQLサーバーは1024列以上のビューを格納することはできません。これは本当の苦痛です。

これでExcelでデータ接続プロパティの背後にあるSQL文を手動で編集するように顧客に教えてください。なんて悪夢!それらの非常に少数はそれを得る。私たちプログラマーは賢明で、ユーザーはダムです。だから、マイクロソフトを尊重している人なら誰でも、私たちのソフトウェアに任意の制限を設けてはなりません。これまでここで

+0

私は完全に同意しますが、それはあまりにも多くのことではありませんが、メモリとコンピュータが制限されていた時代からの制限です。それは私の推測です。 :) – eidylon

6

あなたは、ビューのために1024の以上の列を作成することはできません。

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

それをテストする方法:

実行カラム

手順1ストアド

のn個の数のテーブルを作成するためのこれら二つの手順:手順2ストアド

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 

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 

最初のSPを使用して1024列のテーブルt1を作成します。

2番目のSPを使用して1,024列のテーブル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. 
関連する問題