我正在尋找從一個數據庫遷移到另一個數據庫的幾個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