SQL Server 领有被宽泛认可的一流治理工具——SQL Server Management Studio(简称 SSMS)。它提供了丰盛的性能,极大地简化了开发人员和数据库治理员(DBA)的上班。但是,有时刻也会遇到一些难以经过 SSMS 处置的疑问,尤其是在口头暂时 SQL 脚本或复原解体的 SQL Server 实例时。在这些场景下,SQLCMD就成为了你的得力工具。
在这篇文章中,咱们将深入学习 SQLCMD。它是一特性能弱小的命令行工具,可用于以下义务:
为了使 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实例。
示例1:衔接到自动的SQL Server实例
要在本地计算机上衔接到SQL Server,请经常使用以下SQLCMD命令:
C:\Users\nisar>sqlcmd -S Nisarg-PC
如你所见,命令输入为1>,这标明你已衔接到SQL Server。
请留意,假设你正在衔接到本地计算机上的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、口头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 bon a.owner_sid=b.sid where a.name not in ('ReportServer','ReportServerTempDB')and a.database_id>5;
正如你所看到的,上述查问曾经填充了蕴含数据库及其一切者的数据库列表。
首先,衔接到数据库主机并口头以下查问:
Select DB_NAME()Go
查问前往到主数据库,由于我经常使用登录衔接到SQL Server时没有设置自动数据库。
参数经常使用SQLCMD运转SQL查问。例如,你想经常使用SQLCMD检查在SchoolManagement数据库中创立的表列表。该命令应编写如下:
C:\>sqlcmd -S Nisarg-PC -d SchoolManagement -Q "select name from sys.tables"
雷同,你也可以运转其余查问。请留意,用于衔接SQL主机的登录名必定具备数据库所需的权限。
在这里,咱们将讨论如何经过命令揭示符口头SQL脚本。当你须要运转智能化义务、批量操作以及长期间运转且不须要用户输入的查问时,此性能十分有用。
首先,我曾经创立了一个SQL脚本,其中蕴含一个SQL查问,该查问用于失掉在WideWorldImporters数据库中创立的对象列表。该查问内容如下:
use [WideWorldImporters]goselect name, type_desc, create_date from sys.objects where type_desc <>'SYSTEM_TABLE'
请将上述查问减少到名为sp_get_db_objects.sql的SQL脚本中。接上去,咱们将把查问的输入导出到一个名为database_objects.txt的文本文件中。
为此,咱们将经常使用以下选项:
如今,让咱们口头以下命令:
sqlcmd -S Nisarg-PC -i D:\Scripts\DBObjects.sql -o D:\Scripts\WideWorldImportores_objects.txt
命令成功口头后,你可以检查文本文件输入的内容:
正如你在上方的屏幕截图中看到的那样,查问已成功口头。
接上去,咱们将经过另一个示例展现来学习如何经常使用SQL脚本生成StackOverflow2010的备份。生成备份的查问如下:
use mastergobackup with compression, stats=5
我曾经将上述备份命令存储在名为StackOverflow2010_backup_script.sql的SQL脚本中。要口头此脚本,SQLCMD命令将如下所示:
从上述截图可以看出,备份曾经生成。
要在SSMS(SQL Server Management Studio)中经常使用SQLCMD,首先必定启用SQLCMD形式。为此,请从菜单当选用“查问”,而后选用“SQLCMD形式”,如下所示:
假设你宿愿自动状况下启用SQLCMD形式,请转到“工具”→“选项”。在“选项”对话框中,选用“查问口头”→“SQL Server”→“惯例”,并勾选“自动状况下,在新查问中关上SQLCMD形式”复选框。
如今,让咱们看看如何经常使用它。
例如,我想失掉Stackoverflow2010数据库中Posts表的总记载数。查问应编写如下:
:SETVAR TABLENAME "Posts":SETVAR>
如今,咱们运转查问。以下截图显示了查问输入的内容:
如今,让咱们看看如何在PowerShell中经常使用SQLCMD。
让咱们举一个繁难的例子。假定我想失掉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]goselect 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提供了多种初级技巧,可以协助用户更有效地经常使用该工具。本文将经过繁难示例来阐释其中一些初级用法。
示例1:依据失误重大级别显示失误信息
该示例展现了如何依据失误的重大级别来显示相应的失误信息。可以经过减少-m参数来启用此性能。假定你尝试对一个不存在的数据库对象口头SELECT查问,通常这将前往"Invalid object"(有效对象)的失误信息,其重大级别为16。结果如下:
接上去,咱们来钻研一个重大级别为15(语法失误)的示例:
正如你在上方的截图中看到的,当失误重大级别为15的时刻,SQLCMD没有显示任何失误。
本示例阐释了如何在命令或查问口头环节中遇到失误时,分开SQLCMD会话。要启用此性能,须要指定-b参数。假定你宿愿在查问遇到"数据库不存在"的失误时分开SQLCMD,如下图所示:
本示例阐释了在口头T-SQL脚本时如何接受用户输入。这须要在SQLCMD中编写变量脚本。为了演示这一性能,我创立了一个脚本,用于填充某个国度的正式称号。该脚本经常使用WideWorldImporters数据库和application.Countries表。脚本的关键内容如下:
use [WideWorldImporters]Goselect 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的菜单和对象资源治理器中间接访问经常使用。依据我的实践经常使用体验,这些增强工具节俭了少量的开发期间,因此我向你剧烈介绍经常使用。
刘涛,社区编辑,某大型央企系统上线检测管控担任人。