Sql-Server

SSMS 生成的腳本無法執行

  • December 12, 2018

因此,我需要從較新版本的 SQL Server(我從 2016 SQL Server 恢復到 2014 SQL Server)導入一個小型數據庫(小於 1GB),而兩者之間沒有直接連接。該數據庫是 CMS 的後端,因此不僅儲存正常數據,還儲存 html 內容。

我找到的解決方案(我遵循了本指南。)是在 SSMS(模式+數據)中使用“生成腳本”來編寫數據庫腳本,然後執行腳本以在目標伺服器上重新創建它。生成的腳本總共大約 900MB。

我遇到的第一個問題是 SSMS 不會執行腳本,因為它顯然對它來說太大了。Sqlcmd 能夠開始執行腳本,但隨後失敗了 10000+ 行。當我在失敗點剪切腳本時,它繼續執行它停止的地方沒有問題,所以我猜測它與記憶體不足有關還是什麼?我收到的具體錯誤是

"Sqlcmd Error: Syntax Error at line 14769 near command ' " ' in file <path\script.sql>".

14769 處的實際行是:

INSERT [dbo].[sf_control_properties] (
   [val], 
   [validation], 
   [prnt_prop_id], 
   [ordinal], 
   [nme], 
   [last_modified],
   [language], 
   [id], 
   [flags], 
   [description_], 
   [control_id], 
   [caption_], 
   [app_name], 
   [voa_version]
   ) 
VALUES (
   N'RulesGroupBackend', 
   NULL, 
   NULL, 
   1, 
   N'ControlDefinitionName', 
   CAST(N'2018-03-23T12:35:50.977' AS DateTime), 
   NULL, N'7cf975d2-f37d-4716-a634-0d6424921f38', 
   1, 
   NULL, 
   N'27c93f05-386b-4fd2-8aae-d6664ee7e57a', 
   NULL, 
   N'Title/', 
   1)

前一行(多行語句 14766-14768)是:

INSERT [dbo].[sf_control_properties] (
   [val], 
   [validation], 
   [prnt_prop_id], 
   [ordinal], 
   [nme], 
   [last_modified], 
   [language], 
   [id], 
   [flags], 
   [description_], 
   [control_id], 
   [caption_], 
   [app_name], 
   [voa_version]
   ) 
VALUES (
   N'$(document).ready(function(){
      $("#content > div > section:nth-child(2) > div > div > div > div > div:nth-child(1) > h2").text("English Support");
});', 
   NULL, 
   N'5d056cac-51db-492c-b601-e88c82a8bc72', 
   1, 
   N'InlineCode',
    CAST(N'2018-11-27T20:33:59.060' AS DateTime), 
    NULL, 
    N'1f8ac206-d771-42b2-9991-0ca66bceff19', 
    1, 
    NULL, 
    NULL, 
    NULL, 
    N'Title/', 
    1
    )

我不知道錯誤指的是什麼,當它在命令 ’ " ’ 附近的第 14769 行顯示語法錯誤時

所以總而言之,我想知道 A)這些行的腳本可能出了什麼問題 B)這是否是 sqlcmd 的問題(因為腳本在 SSMS 中也失敗了)。對我來說,腳本看起來很好,畢竟它是由 SSMS 自動生成的,所以我很困惑問題可能是什麼。謝謝!

嘗試使用-x 參數執行 SQLCMD以禁用可變變電站。當腳本包含 SQLCMD 變數標記(例如 $(stuff-here))但實際上不是 SQLCMD 變數時,這將避免出現問題。

引用自:https://dba.stackexchange.com/questions/224796