pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

我們可以在 SQL 事務中多次使用“GO"嗎?

Can we use #39;GO#39; multiple times in SQL Transaction?(我們可以在 SQL 事務中多次使用“GO嗎?)
本文介紹了我們可以在 SQL 事務中多次使用“GO"嗎?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我們可以在一個 SQL 事務中多次使用 GO 語句嗎?我有一個很長的 T-SQL 腳本,我想在 SQL Transaction 中運行它.如果一切順利,那么我會提交,否則會回滾.

Can We use GO statement mutiple times in a SQL Transaction. I am having a long T-SQL script and I want to run it in a SQL Transaction. If all goes well then I will commit otherwise will rollback.

但是,在運行該查詢時,我遇到了類似'create function must be the only statement in the batch'的錯誤.因為我正在創建和刪除許多函數和過程.

But, While running that query I got error like 'create function must be the only statement in the batch'. As I am creating and dropping many Functions and Procedures in that.

我沒有在腳本的任何地方使用 GO.我的問題是 - 我可以在那個長腳本中多次使用 GO 語句.因為,GO 創建了一個批處理,如果批處理第一次執行成功,但下次執行失敗,那么rollback transaction 語句是否能夠真正回滾已執行的事務?

I have not used GO anywhere in the script. My question is that - Can I use multiple times GO statement in that long script. Because, GO creates a batch and if batch executes successfully first time but fails next time then will rollback transaction statement be able to actually rollback that has been executed ?

我的腳本結構如下:

PRINT 'Transaction Started'
BEGIN TRY
    BEGIN TRAN

    Drop Function 
    ....
    ....
    Create Function
    ....
    ....
    Drop Procedure
    ....
    ....
    Lots of statements
    ....
    ....

    COMMIT TRAN
    PRINT 'Transaction Succeeded'
END TRY
BEGIN CATCH
    PRINT 'Transaction Failed'
    IF(@@TRANCOUNT > 0)
        ROLLBACK TRAN
END CATCH

我創建此腳本是為了在單個腳本中將一些更改從 newDB 遷移到 oldDB.

I am creating this script to migrate some changes from newDB to oldDB in a single script.

推薦答案

您正在混合概念.GO 不是 Transact-SQL 的概念,不是語言的一部分,并且不被 SQL Server 理解.GO 是工具批處理分隔符.sqlcmd.exe 和 SSMS 默認都使用 GO 作為批處理分隔符.批處理分隔符用于標識 SQL 源文件中的各個批處理.客戶端工具一次一批地向服務器發送(當然省略分隔符).

You are mixing concepts. GO is not a Transact-SQL concept, not part of the language, and not understood by SQL Server. GO is the tools batch delimiter. sqlcmd.exe and SSMS both are using, by default, GO as the batch delimiter. The batch delimiter is used to identify the individual batches inside the SQL source file. The client tool sends to the server one batch at a time (of course, omitting the delimiter).

交易可以跨批次進行.TRY/CATCH 塊不能.CREATE/ALTER 語句必須是批處理中唯一的語句(注釋不是語句,包含在函數過程體中的語句是包含的).

Transactions can span batches. TRY/CATCH blocks cannot. CREATE/ALTER statements must be the only statement in a batch (comments are not statements, and statements contained in a function procedure body are,well, contained).

通過啟動事務并在第一個錯誤時中止執行(-b at sqlcmd.exe start,或使用:on error exit in SSMS).

Something similar to what you want to do can be achieved by starting a transaction and abortign the execution on first error (-b at sqlcmd.exe start, or use :on error exit in SSMS).

但是在長事務中執行 DDL 是行不通的.特別是如果您打算將它與 DML 混合使用.我必須調查的大多數損壞都來自這種組合(Xact、DDL + DML、回滾).我強烈建議不要這樣做.

But doing DDL inside long transactions is not going to work. Specially if you plan to mix it with DML. Most corruptions I had to investigate come from this combination (Xact, DDL + DML, rollback). I strongly recommend against it.

安全部署架構更新的唯一方法是在出現問題時進行備份、部署和恢復.

The sole way to deploy schema updates safely is to take a backup, deploy, restore from backup if something goes wrong.

請注意,Dan 推薦的(動態 SQL)之所以有效,是因為 sp_executesql 會啟動一個新的內部批處理.此批次將滿足 CREATE/ALTER 限制.

Note that what Dan recommends (dynamic SQL) works because sp_executesql starts a new, inner, batch. This batch will satisfy the CREATE/ALTER restrictions.

這篇關于我們可以在 SQL 事務中多次使用“GO"嗎?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Sql server table usage statistics(Sql server 表使用情況統計)
Relative path in t sql?(t sql中的相對路徑?)
Getting the last record in SQL in WHERE condition(在 WHERE 條件下獲取 SQL 中的最后一條記錄)
Query to get XML output for hierarchical data using FOR XML PATH in SQL Server(在 SQL Server 中使用 FOR XML PATH 查詢以獲取分層數據的 XML 輸出)
T-SQL IF statement embedded in a sum() function(嵌入在 sum() 函數中的 T-SQL IF 語句)
Table vs Temp Table Performance(表與臨時表性能)
主站蜘蛛池模板: 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司| 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 掺铥光纤放大器-C/L波段光纤放大器-小信号光纤放大器-合肥脉锐光电技术有限公司 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 上海乾拓贸易有限公司-日本SMC电磁阀_德国FESTO电磁阀_德国FESTO气缸 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 广州各区危化证办理_危险化学品经营许可证代办 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 深圳成考网-深圳成人高考报名网| 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 广西正涛环保工程有限公司【官网】 | 福建省教师资格证-福建教师资格证考试网 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 定制防伪标签_防伪标签印刷_防伪标签厂家-510品保防伪网 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 2025第九届世界无人机大会 | 福建自考_福建自学考试网 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 |