我尝试运行一个为特定数据库的每个表创建视图的脚本。我找到了这个链接: 如何为数据库中的所有表创建视图?
显然,为了工作,我需要添加“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)
所以打印结果是我所期望的:
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
但 exec 行返回:
消息 156,级别 15,状态 1,过程 *****,第 3 行 [批处理开始行 0]
关键字“CREATE”附近的语法不正确。消息 111,级别 15,状态 1,过程 *****,第 3 行 [批处理开始第 0 行]
“CREATE VIEW”必须是查询批处理中的第一个语句。消息 111,级别 15,状态 1,过程 *****,第 5 行 [批处理开始第 0 行]
“CREATE VIEW”必须是查询批处理中的第一个语句。消息 111,级别 15,状态 1,程序 *****,第 7 行 [批处理开始第 0 行]
我应该创建一个架构吗?我的问题有什么解决办法吗?
非常感谢