成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQLCMD完全指南:掌控 SQL Server

譯文 精選
數據庫 SQL Server
SQL Server 擁有被廣泛認可的一流管理工具——SQL Server Management Studio(簡稱 SSMS)。它提供了豐富的功能,極大地簡化了開發人員和數據庫管理員(DBA)的工作。

譯者 | 劉濤

審校 | 重樓

目錄

  • SQLCMD 入門
  • 使用 SQLCMD 連接 SQL Server
  • SQLCMD 交互模式操作
  • 在命令提示符中使用 SQLCMD
  • 在 SQL Server Management Studio 中使用 SQLCMD
  • 在 PowerShell 中使用 SQLCMD
  • 高級 SQLCMD 技巧
  • 結論

SQL Server 擁有被廣泛認可的一流管理工具——SQL Server Management Studio(簡稱 SSMS)。它提供了豐富的功能,極大地簡化了開發人員和數據庫管理員(DBA)的工作。然而,有時候也會遇到一些難以通過 SSMS 解決的問題,尤其是在執行臨時 SQL 腳本或恢復崩潰的 SQL Server 實例時。在這些場景下,SQLCMD 就成為了你的得力工具。

SQLCMD 入門

在這篇文章中,我們將深入學習 SQLCMD。它是一個功能強大的命令行工具,可用于以下任務:

  • 在本地和遠程服務器上運行臨時 SQL 查詢和存儲過程
  • 將 SQL 查詢結果導出到文本或 CSV 文件
  • 在 Windows 和 Linux 環境下管理和管控 SQL Server 實例和數據庫

為了使 SSMS 中的查詢編寫更快速、更簡便,并為數據庫管理和操作提供額外功能,我們引入了 dbForge SQL Tools。這是一套無縫集成到 SSMS 中的插件,極大地增強了 SSMS 的能力。

現在,讓我們從 SQLCMD 的安裝開始。

要安裝SQLCMD實用程序,你需要在安裝SQL Server時選擇本機SQL Server客戶端工具。你還可以使用SQL Server安裝管理器單獨安裝它。

你只需在PowerShell或命令提示符中輸入SQLCMD即可調用SQLCMD實用程序。要查看可與SQLCMD一起使用的選項列表,請運行以下命令:

PS C:\Users\nisar> SQLCMD -?

這是命令行執行后輸出的樣子:

使用 SQLCMD 連接 SQL Server

現在,讓我們了解如何使用SQLCMD連接到SQL Server實例。

示例1:連接到默認的SQL Server實例

要在本地計算機上連接到SQL Server,請使用以下SQLCMD命令:

C:\Users\nisar>sqlcmd -S Nisarg-PC

如你所見,命令輸出為1>,這表明你已連接到SQL Server。

請注意,如果你正在連接到本地計算機上的SQL Server默認實例,則無需明確指定主機名/服務器名。

示例2:連接到命名SQL Server實例

現在,我們來看另一個實例,演示如何連接到特定命名的SQL Server實例。

要連接到命名的SQL Server實例,你需要指定參數-S(服務器名)。例如,如果你的服務器名稱是MyServer,命名實例是SQL2017,則使用SQLCMD連接到它的命令將是:

C:\>sqlcmd -S Nisarg-PC\SQL2019

輸出則是:

示例3:使用Windows身份驗證和SQL Server身份驗證連接到SQL Server

現在,讓我們看看如何使用Windows和SQL Server身份驗證連接到SQL Server。

要使用SQLCMD連接到SQL Server,你可以選擇使用Windows身份驗證或SQL Server身份驗證。如果你想使用SQL Server身份驗證,你需要指定`-U`(用戶名)和`-P`(密碼)選項。如果你沒有確認密碼,SQLCMD工具會提示你輸入密碼。下面的截圖說明了這一點。

SQLCMD 交互模式操作

在本節中,我們將探討如何在交互模式下運行SQLCMD、執行SQL查詢以及查看輸出。交互模式允許編寫SQL語句和命令。讓我們從學習如何連接到SQL服務器、進入交互模式以及在SQLCMD中運行查詢開始。

示例1:填充一個包含數據庫及其所有者的列表

首先,使用以下命令連接到你的數據庫服務器:

C:\>sqlcmd -S Nisarg-PC -U sa -p

當交互式會話開始后,在SQLCMD實用程序中運行以下SQL查詢:

use master;
select a.name,b.name from sys.databases a inner join sys.server_principals b
on a.owner_sid=b.sid where a.name not in ('ReportServer','ReportServerTempDB')
and a.database_id>5;

以下是查詢輸出結果:

正如你所看到的,上述查詢已經填充了包含數據庫及其所有者的數據庫列表。

示例2:檢查當前數據庫

首先,連接到數據庫服務器并執行以下查詢:

Select DB_NAME()
Go

以下是查詢輸出結果:

查詢返回到主數據庫,因為我使用當前登錄連接到SQL Server時沒有設置默認數據庫。

示例3:執行SQL查詢

你可以通過指定-Q參數使用SQLCMD運行SQL查詢。例如,你想使用SQLCMD查看在SchoolManagement數據庫中創建的表列表。該命令應編寫如下:

C:\>sqlcmd -S Nisarg-PC -d SchoolManagement -Q "select name from sys.tables"

查看輸出結果:

同樣,你也可以運行其他查詢。請注意,用于連接SQL服務器的登錄名必須具有數據庫所需的權限。

在命令提示符中使用 SQLCMD

在這里,我們將探討如何通過命令提示符執行SQL腳本。當你需要運行自動化任務、批量操作以及長時間運行且不需要用戶輸入的查詢時,此功能非常有用。

首先,我已經創建了一個SQL腳本,其中包含一個SQL查詢,該查詢用于獲取在WideWorldImporters數據庫中創建的對象列表。該查詢內容如下:

use [WideWorldImporters]
go
select name, type_desc, create_date from sys.objects where type_desc <>'SYSTEM_TABLE'

請將上述查詢添加到名為sp_get_db_objects.sql的SQL腳本中。接下來,我們將把查詢的輸出導出到一個名為database_objects.txt的文本文件中。

為此,我們將使用以下選項:

  • -o:指定目標輸出文件。在本例中為WideWorldImportores_objects.txt。
  • -i:指定SQL腳本的位置。在本例中為DBObjects.sql。

現在,讓我們執行以下命令:

sqlcmd -S Nisarg-PC -i D:\Scripts\DBObjects.sql -o D:\Scripts\WideWorldImportores_objects.txt

命令成功執行后,你可以查看文本文件輸出的內容:

正如你在上面的屏幕截圖中看到的那樣,查詢已成功執行。

接下來,我們將通過另一個示例展示來學習如何使用SQL腳本生成StackOverflow2010的備份。生成備份的查詢如下:

use master
go
backup database [Stackoverflow2010] to disk ='D:\SQLBackups\Stackoverflow2010.bak' with compression, stats=5

我已經將上述備份命令存儲在名為StackOverflow2010_backup_script.sql的SQL腳本中。要執行此腳本,SQLCMD命令將如下所示:

截圖1:

從上述截圖可以看出,備份已經生成。

截圖2:

在 SQL Server Management Studio 中使用 SQLCMD

要在SSMS(SQL Server Management Studio)中使用SQLCMD,首先必須啟用SQLCMD模式。為此,請從菜單中選擇“查詢”,然后選擇“SQLCMD模式”,如下所示:

如果你希望默認情況下啟用SQLCMD模式,請轉到“工具”→“選項”。在“選項”對話框中,選擇“查詢執行”→“SQL Server”→“常規”,并勾選“默認情況下,在新查詢中打開SQLCMD模式”復選框。

現在,讓我們看看如何使用它。

例如,我想獲取Stackoverflow2010數據庫中Posts表的總記錄數。查詢應編寫如下:

:SETVAR TABLENAME "Posts"
:SETVAR DATABASENAME "Stackoverflow2010"
use $(DATABASENAME);
select count(1) from $(TABLENAME);
GO

現在,我們運行查詢。以下截圖顯示了查詢輸出的內容:

現在,讓我們看看如何在PowerShell中使用SQLCMD。

在 PowerShell 中使用 SQLCMD

你可以使用PowerShell調用SQLCMD。要實現這一點,你需要先為SQL Server安裝PowerShell。你可以閱讀相關文章,了解有關SQL Server的PowerShell及其安裝的更多信息。

讓我們舉一個簡單的例子。假設我想獲取WideWorldImporters數據庫中存儲過程的列表。以下是PowerShell命令:

PS C:\WINDOWS\system32> invoke-sqlcmd -database wideworldimporters -query "select name from sys.procedures"

執行結果如圖所示:

SQL Server中的PowerShell模塊(SQLPS)也提供了一種將SQL腳本輸出導入文本文件的方式。假設我們需要導出SQL服務器代理工作列表。我已經創建了一個名為SQLJobs.sql的腳本,用于檢索SQL工作列表的相關信息。該腳本包含以下T-SQL命令:

use [msdb]
go
select name, description,date_created from Sysjobs

為了運行該腳本,我在SQL Server的PowerShell中執行以下命令:

invoke-sqlcmd -inputfile "D:\Scripts\SQLJobs.sql" | Out-File -FilePath "D:\Scripts\SQLJobs_List.txt"

命令完成后,我打開輸出文件,內容如下圖所示:

高級 SQLCMD 技巧

SQLCMD提供了多種高級技巧,可以幫助用戶更有效地使用該工具。本文將通過簡單示例來闡釋其中一些高級用法。

示例1:根據錯誤嚴重級別顯示錯誤消息

該示例展示了如何根據錯誤的嚴重級別來顯示相應的錯誤消息。可以通過添加-m參數來啟用此功能。假設你嘗試對一個不存在的數據庫對象執行SELECT查詢,通常這將返回"Invalid object"(無效對象)的錯誤信息,其嚴重級別為16。結果如下:

接下來,我們來研究一個嚴重級別為15(語法錯誤)的示例:

正如你在上面的截圖中看到的,當錯誤嚴重級別為15的時候,SQLCMD沒有顯示任何錯誤。

示例2:遇錯即退出SQLCMD會話

本示例闡釋了如何在命令或查詢執行過程中遇到錯誤時,退出SQLCMD會話。要啟用此功能,需要指定-b參數。假設你希望在查詢遇到"數據庫不存在"的錯誤時退出SQLCMD,如下圖所示:

示例3:接受用戶輸入

本示例闡釋了在執行T-SQL腳本時如何接受用戶輸入。這需要在SQLCMD中編寫變量腳本。為了演示這一功能,我創建了一個腳本,用于填充某個國家的正式名稱。該腳本使用WideWorldImporters數據庫和application.Countries表。腳本的主要內容如下:

use [WideWorldImporters]
Go
select CountryName, FormalName from application.countries where CountryName=$(CountryName)
Go

現在,我保存腳本并使用以下SQLCMD命令執行它:

sqlcmd -S Nisarg-PC -v CountryName='India' -i D:\Scripts\Asia_Countries.sql

輸出結果如下:

如你所見,查詢返回了正式名稱India。

結論

通過本文的介紹,你已經了解了SQLCMD命令的多種用法和示例應用。SQLCMD是一款功能強大的工具,可用于執行腳本、導出輸出到各種文件格式,以及管理SQL Server實例。另外,當數據庫服務器出現損壞或無法訪問的情況時,你還可以利用專用管理連接(Dedicated Administrator Connection,簡稱DAC)來獲取訪問權限。

此外,我們建議你考慮使用第三方增強工具,如dbForge SQL Tools等插件包,來擴展SQL Server Management Studio(SSMS)的基礎功能。這些插件可為SSMS提供諸如智能代碼補全、代碼格式化、源代碼控制、單元測試、命令行自動化等多種增強功能,極大地提高了開發效率。

DbForge SQL Tools為新用戶提供長達30天的免費試用期。一旦你安裝了該插件包,所有增強功能都可以方便地在SSMS的菜單和對象資源管理器中直接訪問使用。根據我的實際使用體驗,這些增強工具節省了大量的開發時間,因此我向你強烈推薦使用。

譯者介紹

劉濤,51CTO社區編輯,某大型央企系統上線檢測管控負責人。

原文標題:The Ultimate Guide to Navigating SQL Server With SQLCMD,作者:Nisarg Upadhyay

責任編輯:姜華 來源: 51CTO
相關推薦

2010-09-16 12:40:04

PPPOE SERVE

2024-11-13 09:16:13

2011-10-24 17:12:01

Cloud SQL

2011-09-07 10:24:01

SQL Server鏡像

2022-08-15 10:09:40

CIOIT領導者

2018-11-26 06:22:32

WiFi無線網絡路由器

2023-10-08 18:07:42

Kubernetes開源容器

2010-11-09 16:14:52

卸載SQL Serve

2012-04-25 15:23:52

SQL Server

2015-07-31 10:20:13

Linux命令完全指南

2023-07-09 09:45:25

2017-04-19 20:10:20

SQLJOIN

2010-07-19 16:04:45

SQL Server索

2010-07-19 16:36:13

SQL Server視

2022-07-27 08:00:00

物聯網架構連接設備

2009-12-04 19:18:04

freebsd手工配置網絡

2022-01-17 07:22:11

Web應用滲透

2010-09-29 17:55:57

Cacti網絡監控

2015-09-01 10:42:15

編程規范完全指南

2022-09-13 09:02:19

React客戶端服務端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本不卡一区二区三区 | 国产乱码久久久久久一区二区 | 有码在线| 欧美一级淫片免费视频黄 | 国产日产欧产精品精品推荐蛮挑 | 国产一二区免费视频 | 亚洲性人人天天夜夜摸 | 国产精品视频网 | 欧美午夜激情在线 | 一区二区久久精品 | 亚洲欧洲综合av | 一区二区精品 | 久久的色 | 啪啪综合网 | 伊人二区 | 九九精品在线 | 国产高清一区 | 福利一区二区 | 国产精品精品视频一区二区三区 | 国产成人精品午夜视频免费 | 欧美最猛黑人 | 日韩精品一区二区三区视频播放 | 久产久精国产品 | 在线一区| 国产毛片av| 日本久久网 | 欧美成人精品一区二区三区 | 久久久久亚洲 | 中文字幕日韩av | 国产超碰人人爽人人做人人爱 | av手机免费在线观看 | 日韩精品视频一区二区三区 | 一级片视频免费 | 69av网 | 国产精品成av人在线视午夜片 | 成人免费网站在线 | a欧美| 成人三级视频 | 夜夜草| 91色在线 | 久久久国产一区二区三区 |