日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Sqlcmd 使用

系統 1849 0
Sqlcmd是SQL Server 2005所帶的一個命令行工具。它是用于執行SQL腳本和替代上一個版本SQL Server的osql工具。除了執行SQL代碼,它也執行所謂的“sqlcmd擴展”。這些擴展提供了許多普通SQL之外的功能,使得sqlcmd成為用腳本自動化SQL Server數據庫管理和維護的一個好用的工具。本文將介紹使用sqlcmd的基本方法,并提供一些它在SQL Server管理和維護中的實踐方法。

  從命令行提示窗口中以交互模式啟動sqlcmd命令。當在窗口中執行SQL查詢時,我們就會即時看到結果,而相同的查詢操作我們在SQL Server Management Studio的sqlcmd模式可以更簡單地實現。Sqlcmd的真正作用在于它能夠很容易自動執行已保存的帶有位置和執行方式選項的SQL腳本——選項控制可以通過傳入參數或sqlcmd變更實現。

  下面是一組最常用的sqlcmd特性:

  1、執行腳本文件。在sqlcmd中執行腳本文件的方法有2種。在DOS中,可以調用sqlcmd命令,并用選項-i傳入想要執行的文件名:

  sqlcmd -i"c:\sql\MySql.sql"

  注意:雙引號只在路徑中包含空格時才是必需的,但為了保持一致性,我總是使用雙引號來表示路徑。

  第二個方法是從一個執行的SQL文件中調用另一個SQL文件。這可以使我們實現更多層次的腳本文件,其中最上層負責控制整個流程——指定執行的文件和傳入的參數。下面的腳本將從一個在sqlcmd模式中運行的SQL文件中執行MySql.sql文件:

  :r "c:\sql\MySql.sql"

  2、使用和傳遞變量。在我看來,這是SQL Server 2005的sqlcmd對比于之前的SQL Server版本的osql的最好用的功能。我們可以在sqlcmd腳本內使用:server指令聲明變量,然后在后面的代碼中將變量名放在placeholder $()中來使用這些變量。Sqlcmd會用所引用變量的值替換這些占位符。

  :setvar hello "Hello World"

  PRINT '$(hello)'

  如果聲明和定義了一個變量,那么其中會有一個很有用的操作是執行上下文其中包括聲明變量的文件所調用的所有腳本文件。這使我們能將變量從父腳本文件傳遞到子腳本文件。在下面的例子中,變量hello在所調用的MySql2.sql文件中也是可以使用的。

  :setvar hello "Hello World"

  :r "c:\sql\MySql2.sql"

  如果在DOS中調用sqlcmd,我們可以傳入參數并使用命令行選項-v來傳遞它們。

  sqlcmd -i"c:\sql\MySql2.sql" -

  vhello="Hello World"

  3、連接到多個服務器。在啟動sqlcmd時,我們需要連接到一個特定的服務器來執行我們的代碼。但是在SQL中,你可以將連接修改為另一個不同的服務器,然后接下來的腳本都會在新的服務器上執行。我們可以使用下面的命令來連接另一個服務器:

  :connect MyServer2

  SELECT * FROM sys.databases – returns

  databases from MyServer2

4、改進錯誤處理。Sqlcmd會有許多選項可用于處理程序所遇到的意外情況。將這個特性與sqlcmd變量相結合,我們可以很靈活地處理所遇到的意外情況。例如,如果我們想要確定一個特定的腳本文件只會在一個指定的數據庫服務器上執行,那么我們需要在代碼中確保它不會出錯。這個例子使用“:on error exit”命令來規如果SQL Server實例的名稱不是PREHAK,腳本的執行就應該停止:
  :on?error?exit
  IF?(@@servername?!=?'RREHAK')
  BEGIN
  RAISERROR(N'This?script?can?only
  Execute?on?RREHAK',?16,?127)
  END

  任何跟在上面代碼后的腳本都不會執行。

  5、備份和恢復一個數據庫。現在我將介紹一個好用的sqlcmd腳本例子。我經常會創建腳本來備份一個服務器上的數據庫,然后將它恢復到另一個服務器上。通過使用sqlcmd,我們可以在一個腳本里完成這所有的操作,因為我們可以同時連接到源和目標服務器。下面的腳本會備份一個服務器上的Northwind數據庫,然后再將它恢復到另一臺服務器上。

  --?connect?to?the?source?server
  :CONNECT?rrehak\sql2000
  BACKUP?DATABASE?Northwind
  TO?DISK?=?'C:\Temp\Northwind.bak'
  WITH?INIT
  GO
  --?connect?to?the?destination?server
  :CONNECT?rrehak
  --?if?the?database?exists,?disconnect?any
  possible?connections
  IF?EXISTS?(SELECT?*?FROM
  master.dbo.sysdatabases?WHERE?name?=
  'Northwind')
  ALTER?DATABASE?Northwind
  SET?SINGLE_USER?WITH?ROLLBACK?IMMEDIATE
  GO
  RESTORE?DATABASE?[Northwind]
  FROM?DISK?=?N'C:\Temp\Northwind.bak'
  WITH?FILE?=?1,
  MOVE?N'Northwind'?TO?N'C:\SQL?Server
  Databases\Northwind.mdf',
  MOVE?N'Northwind_log'?TO?N'C:\SQL?Server
  Databases\Northwind_1.ldf',
  NOUNLOAD,?STATS?=?10
  GO

  這個腳本作了進一步的改進,它向我們演示了如何在sqlcmd上執行操作系統的命令。演示腳本從源數據庫所備份的位置恢復數據庫。假設我們要拷貝一個備份文件到目標服務器的一個文件夾,因為我們將重復地恢復這個文件,這樣做可以避免通過網絡來恢復。Sqlcmd可以使用指令:!!來執行DOS命令。這樣,將下面的腳本放在備份部分代碼之后而在恢復部分代碼之前,就可以執行DOS拷貝命令來創建備份文件的一個拷貝了:

  :setvar?CopyCommand?"copy
  \?\sqlserver1\c$\Temp\Northwind.bak
  \?\sqlserver2\c$\sql"
  :!!?$(CopyCommand)

  所有這些特性使得sqlcmd成為自動化SQL Server管理和維護的工具。例如,我們可以創建一個“worker”腳本文件,它包含一套通用的腳本,它們需要在多個數據庫、甚至多個服務器上執行。在這些腳本中我們將使用sqlcmd變量:

  本文概述了使用sqlcmd工具的方法和實例。你可以在Microsoft Books Online上閱讀更多關于sqlcmd的文章,然后開始創建你自己的一套腳本,來自動化你的重復性任務,從而提高你的工作效率。

Sqlcmd 使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 依安县| 阳东县| 赤峰市| 临夏市| 池州市| 新田县| 星座| 万载县| 仁布县| 蓬莱市| 平和县| 嘉义县| 叙永县| 大田县| 察雅县| 吉林市| 佳木斯市| 隆昌县| 南投县| 阿尔山市| 林周县| 丁青县| 麻栗坡县| 桐梓县| 盘锦市| 南宁市| 湘潭县| 凯里市| 临湘市| 宜春市| 芮城县| 深水埗区| 乃东县| 贵溪市| 汽车| 咸阳市| 桦川县| 疏附县| 高淳县| 湄潭县| 延庆县|