自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQLCMD完全指南:掌控 SQL Server

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

譯者 | 劉濤

審校 | 重樓

目錄

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

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

SQLCMD 入門

在這篇文章中,我們將深入學(xué)習(xí) SQLCMD。它是一個功能強(qiáng)大的命令行工具,可用于以下任務(wù):

  • 在本地和遠(yuǎn)程服務(wù)器上運(yùn)行臨時 SQL 查詢和存儲過程
  • 將 SQL 查詢結(jié)果導(dǎo)出到文本或 CSV 文件
  • 在 Windows 和 Linux 環(huán)境下管理和管控 SQL Server 實(shí)例和數(shù)據(jù)庫

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

現(xiàn)在,讓我們從 SQLCMD 的安裝開始。

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

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

PS C:\Users\nisar> SQLCMD -?

這是命令行執(zhí)行后輸出的樣子:

使用 SQLCMD 連接 SQL Server

現(xiàn)在,讓我們了解如何使用SQLCMD連接到SQL Server實(shí)例。

示例1:連接到默認(rèn)的SQL Server實(shí)例

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

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

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

請注意,如果你正在連接到本地計算機(jī)上的SQL Server默認(rèn)實(shí)例,則無需明確指定主機(jī)名/服務(wù)器名。

示例2:連接到命名SQL Server實(shí)例

現(xiàn)在,我們來看另一個實(shí)例,演示如何連接到特定命名的SQL Server實(shí)例。

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

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

輸出則是:

示例3:使用Windows身份驗(yàn)證和SQL Server身份驗(yàn)證連接到SQL Server

現(xiàn)在,讓我們看看如何使用Windows和SQL Server身份驗(yàn)證連接到SQL Server。

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

SQLCMD 交互模式操作

在本節(jié)中,我們將探討如何在交互模式下運(yùn)行SQLCMD、執(zhí)行SQL查詢以及查看輸出。交互模式允許編寫SQL語句和命令。讓我們從學(xué)習(xí)如何連接到SQL服務(wù)器、進(jìn)入交互模式以及在SQLCMD中運(yùn)行查詢開始。

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

首先,使用以下命令連接到你的數(shù)據(jù)庫服務(wù)器:

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

當(dāng)交互式會話開始后,在SQLCMD實(shí)用程序中運(yùn)行以下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;

以下是查詢輸出結(jié)果:

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

示例2:檢查當(dāng)前數(shù)據(jù)庫

首先,連接到數(shù)據(jù)庫服務(wù)器并執(zhí)行以下查詢:

Select DB_NAME()
Go

以下是查詢輸出結(jié)果:

查詢返回到主數(shù)據(jù)庫,因?yàn)槲沂褂卯?dāng)前登錄連接到SQL Server時沒有設(shè)置默認(rèn)數(shù)據(jù)庫。

示例3:執(zhí)行SQL查詢

你可以通過指定-Q參數(shù)使用SQLCMD運(yùn)行SQL查詢。例如,你想使用SQLCMD查看在SchoolManagement數(shù)據(jù)庫中創(chuàng)建的表列表。該命令應(yīng)編寫如下:

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

查看輸出結(jié)果:

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

在命令提示符中使用 SQLCMD

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

首先,我已經(jīng)創(chuàng)建了一個SQL腳本,其中包含一個SQL查詢,該查詢用于獲取在WideWorldImporters數(shù)據(jù)庫中創(chuàng)建的對象列表。該查詢內(nèi)容如下:

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

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

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

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

現(xiàn)在,讓我們執(zhí)行以下命令:

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

命令成功執(zhí)行后,你可以查看文本文件輸出的內(nèi)容:

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

接下來,我們將通過另一個示例展示來學(xué)習(xí)如何使用SQL腳本生成StackOverflow2010的備份。生成備份的查詢?nèi)缦拢?/span>

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

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

截圖1:

從上述截圖可以看出,備份已經(jīng)生成。

截圖2:

在 SQL Server Management Studio 中使用 SQLCMD

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

如果你希望默認(rèn)情況下啟用SQLCMD模式,請轉(zhuǎn)到“工具”→“選項”。在“選項”對話框中,選擇“查詢執(zhí)行”→“SQL Server”→“常規(guī)”,并勾選“默認(rèn)情況下,在新查詢中打開SQLCMD模式”復(fù)選框。

現(xiàn)在,讓我們看看如何使用它。

例如,我想獲取Stackoverflow2010數(shù)據(jù)庫中Posts表的總記錄數(shù)。查詢應(yīng)編寫如下:

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

現(xiàn)在,我們運(yùn)行查詢。以下截圖顯示了查詢輸出的內(nèi)容:

現(xiàn)在,讓我們看看如何在PowerShell中使用SQLCMD。

在 PowerShell 中使用 SQLCMD

你可以使用PowerShell調(diào)用SQLCMD。要實(shí)現(xiàn)這一點(diǎn),你需要先為SQL Server安裝PowerShell。你可以閱讀相關(guān)文章,了解有關(guān)SQL Server的PowerShell及其安裝的更多信息。

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

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

執(zhí)行結(jié)果如圖所示:

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

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

為了運(yùn)行該腳本,我在SQL Server的PowerShell中執(zhí)行以下命令:

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

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

高級 SQLCMD 技巧

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

示例1:根據(jù)錯誤嚴(yán)重級別顯示錯誤消息

該示例展示了如何根據(jù)錯誤的嚴(yán)重級別來顯示相應(yīng)的錯誤消息??梢酝ㄟ^添加-m參數(shù)來啟用此功能。假設(shè)你嘗試對一個不存在的數(shù)據(jù)庫對象執(zhí)行SELECT查詢,通常這將返回"Invalid object"(無效對象)的錯誤信息,其嚴(yán)重級別為16。結(jié)果如下:

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

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

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

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

示例3:接受用戶輸入

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

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

現(xiàn)在,我保存腳本并使用以下SQLCMD命令執(zhí)行它:

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

輸出結(jié)果如下:

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

結(jié)論

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

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

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

譯者介紹

劉濤,51CTO社區(qū)編輯,某大型央企系統(tǒng)上線檢測管控負(fù)責(zé)人。

原文標(biāo)題:The Ultimate Guide to Navigating SQL Server With SQLCMD,作者:Nisarg Upadhyay

責(zé)任編輯:姜華 來源: 51CTO
相關(guān)推薦

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領(lǐng)導(dǎo)者

2010-11-09 16:14:52

卸載SQL Serve

2018-11-26 06:22:32

WiFi無線網(wǎng)絡(luò)路由器

2023-10-08 18:07:42

Kubernetes開源容器

2012-04-25 15:23:52

SQL Server

2017-04-19 20:10:20

SQLJOIN

2010-07-19 16:04:45

SQL Server索

2023-07-09 09:45:25

2015-07-31 10:20:13

Linux命令完全指南

2010-07-19 16:36:13

SQL Server視

2009-12-04 19:18:04

freebsd手工配置網(wǎng)絡(luò)

2022-07-27 08:00:00

物聯(lián)網(wǎng)架構(gòu)連接設(shè)備

2022-01-17 07:22:11

Web應(yīng)用滲透

2010-09-29 17:55:57

Cacti網(wǎng)絡(luò)監(jiān)控

2018-03-06 09:30:58

2020-03-06 16:00:04

KubernetesSpark容器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號