我正在寻找从一个数据库迁移到另一个数据库的几个SQL视图。两个数据库定义都是相同的,所以我不必担心兼容性问题。我将不得不在多个客户端系统上执行此任务,因此我正在寻求将其自动化,而不是使用“脚本视图另存为”选项并手动复制每个视图。游标执行t-sql创建视图语句
我是全新的游标,所以我很抱歉,如果这是一个非常简单的请求,但我已经尝试了几种方法,并没有得到任何地方。我对这个网站和其他网站的搜索结果都毫无结果。这就是我来了这么远:
declare @sql nvarchar(max)
declare @view nvarchar(max)
declare @dbname nvarchar(30)
set @dbname = 'DatabaseName'
DECLARE cCursor CURSOR LOCAL FOR
SELECT VIEW_DEFINITION
from INFORMATION_SCHEMA.views
where TABLE_NAME like '%MyCriteria%'
OPEN cCursor
FETCH NEXT FROM cCursor into @view
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql = 'USE ' + @dbname + ' GO ' + @view
execute @sql
FETCH NEXT FROM cCursor into @view
END
close cCursor
deallocate cCursor
我得到执行时的错误消息说: 消息203,级别16,状态2,行17 名称“USE DATA14 GO CREATE VIEW ....不是有效的标识符。
其中....表示从信息架构中获取的创建视图语句。
任何想法我做错了什么?
在此先感谢。
编辑:
我尝试另一种方法是不依赖于光标,我相信我是接近,但我仍然得到了我莫名其妙的错误:
use SourceDB
go
declare @sql nvarchar(max)
set @sql = N''
select @sql = @sql + 'USE DestDB' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + s.definition + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
from sys.sql_modules as s
inner join sys.objects as o
on s.object_id = o.object_id
where o.type_desc = 'VIEW'
and s.definition like '%MyCriteria%'
exec data14..sp_executesql @sql
--select @sql
错误的文本消息是: 消息102,级别15,状态1,行2 “GO”附近的语法不正确。 Msg 111,Level 15,State 1,Line 3 'CREATE VIEW'必须是查询批处理中的第一条语句。 消息102,级别15,状态1,行22 附近有语法错误GO'...... 等等等等为列表中的
感谢您抽出宝贵的时间,但我不认为这会为我工作的原因。我对Powershell的了解少于我对光标的了解,因此,重新设计这些以适应我的需求将非常耗时。另外,如果我理解正确,这将意味着创建目录,在控制台中运行每个语句,然后清理目录。这减少了手工劳动的数量,但仍然留下比理想的步骤更多的步骤。 – 3xStampA2xStamp