Ich versuche, ein Skript auszuführen, die eine Sicht für jede Tabelle einer bestimmten Datenbank erstellen. Ich fand diesen Link: How to create view for all tables in database?Erstellen Sie mehrere Ansichten in derselben Charge in SQL
und anscheinend, um mich zu arbeiten, um die ‚GO‘ Erklärung und einen Wagenrücklauf hinzufügen müssen. Also hier ist, was ich tat
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)
So ist das Druckergebnis, was ich erwarten:
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
aber die exec Linie zurück:
Msg 156, Ebene 15, Status 1, Prozedur *****, Zeile 3 [Batch Start Line 0]
Falsche Syntax in der Nähe des Schlüsselwortes 'CREATE'.Msg 111, Ebene 15, Status 1, Prozedur *****, Zeile 3 [Start Charge Zeile 0]
'CREATE VIEW' muss die erste Anweisung in einem Abfragebatch sein.Msg 111, Ebene 15, Status 1, Prozedur *****, Zeile 5 [Start Charge Zeile 0]
'CREATE VIEW' muss die erste Anweisung in einem Abfragebatch sein.Msg 111, Ebene 15, Status 1, Prozedur *****, Zeile 7 [Start Charge Zeile 0]
Sollte erstelle ich ein Schema? Irgendeine Lösung für mein Problem?
Vielen Dank
Dies ist ein Ort, an dem ein Cursor Ihnen tatsächlich helfen kann. Es wird es einfacher machen, durch alle Tabellen zu iterieren und nur eine "CREATE VIEW" zu einem Zeitpunkt auszuführen, ohne dass man durch Schleifen mit Wagenrückläufen usw. springen muss. Auch, warum nicht einfach SELECT * FROM blah verwenden Gibt es immer ein beliebiges Feld? Schließlich, warum nicht einfach 'DECLARE @ GO NVARCHAR (MAX) = CHAR (13) + CHAR (10) + 'GO' + CHAR (13) + CHAR (10);' und dann '@ GO' an das Ende anhängen von jeder Aussage? – MatBailie
Es ist auch möglich, dass Sie einen Namen haben, der zu lang ist. Probieren Sie 'SELECT length, COUNT (*) FROM aus (SELECT LEN (Name) length FROM sys.tables WHERE schema_id = 1) name_lengths GROUP BY Länge ORDER BY length;' um zu sehen, ob Sie bereits Tabellennamen mit maximaler Namenslänge haben? * (128 bis 2008, und 256 von da an.) * – MatBailie
@MatBailie: Vielen Dank für Ihre Ratschläge, zuerst glaube ich nicht, dass das Problem von der Länge kommt. Gute Idee über das "Go";) Ich werde mit einem Cursor versuchen, ich kenne sie nicht viel, aber ich werde überprüfen, wie man sie bei Google verwendet;) – Json