2016-09-12 13 views
0

データベース全体に対して作成するバルクビューがいくつかあります。私はINFORMATION_SCHEMA.COLUMNSから列名([COLULMN1][COLUMN2]など)を照会することにより、上記のスクリプトの列名を設定したいT-SQL:select文の列を含むビューを作成するスクリプト

CREATE VIEW [TABLE_NAME] 
AS 
    SELECT [COLUMN1], [COLUMN2], [COLUMN3], [COLUMN4] 
    FROM [TABLE_NAME] 
    WITH CHECK OPTION; 

は次のように一般的な構文は、ビューを作成します。

テーブル名でこれを達成する方法はありますか?

+0

はい、あなたは動的SQLが必要 – Lamak

答えて

0

COALESCEはあなたの友人の良いプログラマです。あなたがしたいことは、COLUMNSのcsvリストを取得することです。動的SQLを使用すると、残りのコードを自動的に生成できます。

declare @columns AS VARCHAR(MAX) 

SELECT @COLUMNS = NULL 


select @COLUMNS = coalesce(@columns+',','')+c.name from syscolumns as c 
inner join sysobjects as o on c.id = o.id 
WHERE O.NAME = 'change me to your table name' 

SELECT @COLUMNS 
SELECT ' CREATE VIEW ' + 'COOL VIEW NAME' + ' AS ' + 
' SELECT ' + @COLUMNS + 
' FROM '+ ' change me to your table name '+ 
' WITH CHECK OPTION;' 

EDIT

私は意図的にどこでもビューを宣言していませんでした。ビューを宣言したい場合は、そのようなスクリプトを実行してください。 サーバー上でコードを読み取らずに実行することは絶対に避けてください。実行部分を意図的に除外しました。コードを切り貼りして理解/テストせずに実行するのは悪い判断と思います。

DECLARE @sql varchar(max) 


    SELECT @sql = ' CREATE VIEW ' + 'COOL VIEW NAME' + ' AS ' + 
    ' SELECT ' + @COLUMNS + 
    ' FROM '+ ' change me to your table name '+ 
    ' WITH CHECK OPTION;' 

EXEC(@sql); 
+0

ワンダフルでスマートIDEA!ご清聴ありがとうございます。私はそれを試して、それがどのように動作するかをお知らせします! – BuckeyeJane

+0

これを試しても機能していないようです。以下は正常に実行されましたが、どこにでも作成されたビューは表示されません。 – BuckeyeJane

+0

'VIEWを作成 'tmp_fieldNames を選びなさい - @fieldnames 選択からV_FIELDNAME に+('、 '' + @フィールド名) 'を@fieldnames VARCHAR(MAX) 選択@fieldnames = COALESCEを宣言' +「DS_STAGE_QAS.dbo '+ \t 'AS .DYN_MARC_P2004' +' チェックオプション付きSTAGE_MARC.PLANT = 2040 '+ \t ' '+ 'STAGE_MARC' + \t' FROM' + @fieldnames + \t' を選択します;' ' – BuckeyeJane

0

ここに1つのオプションは...あなたがしたいテーブル名を「MyTableName」を置き換える、または@tablenameにINFORMATION_SCHEMA.VIEWSからTABLE_NAMEを読み込みカーソルでそれをラップします:

DECLARE @tableName sysname; 
DECLARE @sql nvarchar(max); 
DECLARE @columnList nvarchar(max); 
SELECT @tableName = 'MyTableName'; 
SELECT @columnList = ''; 
SELECT @columnList += CASE WHEN LEN(@columnList) = 0 THEN '' ELSE ', ' END + COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName ORDER BY ORDINAL_POSITION; 
SELECT @sql = 'CREATE VIEW [TABLE_NAME] AS 
SELECT ' + @columnList + ' 
FROM [' + @tableName + '] 
WITH CHECK OPTION;' 

PRINT @sql 
EXEC(@sql); 
関連する問題