特定のデータベースの各テーブルのビューを作成するスクリプトを実行しようとしました。 私は、このリンクが見つかりました: How to create view for all tables in database?複数のビューをSQLで同じバッチで作成
を明らかにして、動作するために、私は「GO」ステートメントとキャリッジリターンを追加する必要があります。
CREATE VIEW ***** AS SELECT Parent_Path,id,a2ea,userLabel,DATE,HEURE,REF_EQT,COMMANDE_REF,LOG FROM *****
go
CREATE VIEW ***** AS SELECT AlarmIdentifier,Class,Category,Time,ObjectOfReference,AlarmText,DATE,HEURE,REF_EQT,SS_EQT,Carte_EQT,COMMANDE_REF,LOG FROM *****
go
CREATE VIEW ***** AS SELECT CELL,MCC,MNC,LAC,CID,BSC,CO,EA,RO,NCS,DATE,HEURE,REF_EQT,SS_EQT,Carte_EQT,COMMANDE_REF,LOG FROM *****
go
CREATE VIEW ***** AS SELECT RNC,RNCID,R1,R2,GLCNID,RNCCODEC,TB,DATE,HEURE,REF_EQT,SS_EQT,Carte_EQT,COMMANDE_REF,LOG FROM *****
go
CREATE VIEW ***** AS SELECT MGG,MG,RESTRICTED,DEFAULT,MISC,MGP,WF,DATE,HEURE,REF_EQT,SS_EQT,Carte_EQT,COMMANDE_REF,LOG FROM [NRGGP]
go
CREATE VIEW ***** AS SELECT SNT,SNTV,SNTP,DIP,DEV,DEVP,SNTINL,EQLEV,PROT,SDIP,SUBSNT,DEFPST,EXTP,MG,DATE,HEURE,REF_EQT,COMMANDE_REF,LOG FROM *****
go
CREATE VIEW ***** AS SELECT RefreshLog_Id,Date,Etat,DateTransfert,Transfert FROM *****
go
が、幹部の行が返されます:だから、ここで私は、印刷結果は、私が期待するものである
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = ''
SELECT
@SQL = @SQL+
N'CREATE VIEW [v2_' + t.name + N'] AS SELECT ' +
STUFF(
(SELECT N',' + c.name
FROM
sys.columns AS c
WHERE
c.OBJECT_ID = t.OBJECT_ID
ORDER BY
column_id
FOR XML PATH(''), TYPE).value('.',N'nvarchar(max)')
,1,1,N'')
+ N' FROM [' + t.name + N'] [\r\n]go[\r\n]'
FROM
sys.tables AS t
WHERE
t.schema_id ='1'
SET @SQL = REPLACE(@SQL,'[\r\n]',CHAR(13)+CHAR(10))
PRINT @SQL
EXECUTE (@SQL)
をやったことある
メッセージ156、レベル15、状態1、プロシージャ*****、行3 [バッチ開始行0]
キーワード 'CREATE'の近くに構文が正しくありません。レベル15、状態1、プロシージャ*****、行3 [バッチ開始行0]
'CREATE VIEW'は、クエリバッチの最初の文でなければなりません。レベル11、状態1、プロシージャ*****、行5 [バッチ開始行0]
'CREATE VIEW'は、クエリバッチの最初の文でなければなりません。メッセージ111、レベル15、状態1、プロシージャ*****、7行[バッチスタートライン0]
は、私は、スキーマを作成する必要がありますか?私の問題に対する解決策はありますか?
はカーソルを使用して非常に
これは、カーソルが実際に役立つ1つの場所です。すべてのテーブルを繰り返し処理して、一度に1つの 'CREATE VIEW'を実行することが簡単になります。キャリッジリターンなどでフープをジャンプする必要はありません。また、' SELECT * FROM blah'を使用しないでください。いつもあらゆる分野を何らかの方法で取り入れていますか?最後に、DECLARE @GO NVARCHAR(MAX)= CHAR(13)+ CHAR(10)+ 'GO' + CHAR(13)+ CHAR(10);を使用し、最後に '@GO'を追加する各明細書の? – MatBailie
また、名前が長すぎる可能性があります。 'SELECT length、COUNT(*)FROM(SELECT LEN(name)length from sys.tables WHERE schema_id = 1)name_lengths GROUP BY length ORDER BY length;'すでに最大名前長のテーブル名があるかどうかを調べるには? *(128から2008年、それ以降は256)* – MatBailie
@MatBailie:あなたのアドバイスのために大変ありがとうございます。まず問題は長さから来ているとは思えません。 "Go"についての良い考え;)私はカーソルで試してみるが、それほどよく分からないが、私はそれらをGoogle上でどのように使うかをチェックする;) – Json