【发布时间】:2016-02-11 10:27:39
【问题描述】:
我正在开发一个脚本,允许我在另一个数据库 (database2) 中创建 database1 中存在的所有视图。
我正在尝试使用在 database1 的所有视图上循环的游标来执行此操作,然后尝试在第二个数据库上执行该视图的定义。
不幸的是,它不起作用。我收到以下错误:
语法不正确 vers 'go'。
Msg 111、Niveau 15、État 1、Ligne 14
'CREATE VIEW' doit être la première instruction d'un traitement de requêtes.
这是我的代码
declare @database2 varchar(50), @database1 varchar(50)
set @database2 = 'Local'
set @database1 = 'prod'
declare @Query nvarchar(max), @view_definition nvarchar(max), @count int
set @count = 0
declare curseur cursor for SELECT top 1 view_definition FROM prod.information_schema.VIEWS
open curseur
fetch curseur into @view_definition
While @@FETCH_STATUS = 0
Begin
set @count = @count + 1
--Print 'Vue N° ' + cast(@count as varchar) + ':'
set @Query = N'Use ' + @database2 +CHAR(13)+CHAR(10)+ 'go' + @view_definition +CHAR(13)+CHAR(10)+ 'go'
print @Query
exec sp_executesql @Query
fetch curseur into @view_definition
End
Close curseur
deallocate curseur
此代码是从 database1 执行的。
但是,当我执行“打印@Query”指令的结果时,它起作用了!!
有人可以帮我解决问题吗?
提前致谢
【问题讨论】:
-
为什么不在第一个数据库中生成
CREATE视图脚本并在第二个数据库中执行? -
你能翻译一下doit être la première instruction d'un traitement de requêtes吗?
-
这个法语表达意味着创建视图的指令必须在进程中的第一个位置
-
你能显示你的打印语句显示的内容吗?
-
你好 steve,这是打印语句显示:--Vue N° 1: Use wi_vigicolisLocal go CREATE VIEW [dbo].[PlateformeCollaborative] AS select rc.category_id,cc.category_name rc.RCode_Text from rcode rc left join rcodeprocessing rcp on rc.rcode_id=rcp.rcode_id inner join categorycontent cc on rc.category_id=cc.category_id and language_id='FR' inner join rshipper rs on rc.rshipper_id=rs.rshipper_id 其中 rcp.RCodeProcessing_ID 为空去。 go 子句单独换行
标签: sql-server cursor