SQL Server 中以冒号开头的行

Aar*_*nus 5 sql-server syntax

在处理 DB 项目时,Visual Studio 生成了一个包含以下几行的更改脚本:

GO
SET ANSI_NULLS, ANSI_PADDING --etc.;
SET NUMERIC_ROUNDABORT OFF;

GO
:setvar DatabaseName "Foo"
:setvar DefaultFilePrefix "Foo"
:setvar DefaultDataPath ""
:setvar DefaultLogPath ""

GO
:on error exit
GO

:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
    BEGIN
        PRINT N'SQLCMD mode must be enabled to successfully execute this script.';
        SET NOEXEC ON;
    END

GO
USE [$(DatabaseName)];

GO
CREATE NONCLUSTERED INDEX [SomeIndex]
    ON [dbo].[SomeTable]([SomeColumn] ASC);

GO
Run Code Online (Sandbox Code Playgroud)

行首的冒号有什么意义?这个 Stackoverflow 问题说冒号用于绑定变量,但是冒号有:on error exit什么作用呢?

JGA*_*JGA 11

这是 SQLCMD

你拥有的是一个sqlcmd脚本。
sqlcmd实用程序允许您在命令提示符下输入 Transact-SQL 语句、系统过程和脚本文件。

并且 sqlcmd 有一些以冒号开头的 sqlcmd 特定命令

下面是有关 sqlcmd 的一些一般信息。

运行 sqlcmd 的 CLI 屏幕截图

您可以编写在键入后执行的 SQL 语句GO。在示例中,首先AdventureWorks2012选择数据库,然后SELECT执行 a。

-i 包含脚本

但是,您也可以使用选项-i执行准备好的脚本,例如:

脚本01.txt

在此处输入图片说明

-v 传入一个值

您还可以使用符号$(name)创建脚本变量并使用选项-v从命令提示符传递值

脚本02.txt

在此处输入图片说明

除了命令提示符之外,还可以通过SQLCMD mode在查询窗口中进行选择,从 SQL Server Management Studio 执行包括脚本变量在内的代码。

SSMS GUI 中 SQLCMD 模式的图标

:SETVAR

在这种环境中,您可以使用:SETVAR命令来设置脚本变量的值

在此处输入图片说明

:ON 错误

:ON ERROR [EXIT | IGNORE]设置在脚本或批处理执行过程中发生错误时要执行的操作。

忽略

错误忽略的屏幕截图

使用该IGNORE选项时,将忽略错误并继续执行批处理或脚本。但是,会打印错误消息。

出口

错误退出时的屏幕截图

使用该EXIT选项时,执行停止并存在。