声明并分配变量和同义词

已完成

在 T-SQL 中,与其他编程语言一样,变量是允许临时存储值以供以后使用的对象。 您在使用变量将参数值传递给存储过程和函数时,已经遇到过变量。

在 T-SQL 中,必须先声明变量,然后才能使用变量。 在声明值时,可以为其分配值或初始化它们。 声明变量包括提供名称和数据类型,如下所示。 若要声明变量,必须使用 DECLARE 语句。

--Declare and initialize the variables.
DECLARE @numrows INT = 3, @catid INT = 2;
--Use variables to pass the parameters to the procedure.
EXEC Production.ProdsByCategory @numrows = @numrows, @catid = @catid;
GO

必须在引用变量的同一批次中声明变量。 换句话说,所有 T-SQL 变量在批处理范围内都是局部变量,无论在可见性还是生存期内都是本地的。 只有同一批中的其他语句才能看到批处理中声明的变量。 批处理结束时,变量会自动销毁。

使用变量

声明变量后,必须对其进行初始化或为其赋值。 你可以通过三种方式执行此操作:

  • 在 SQL Server 2008 或更高版本中,可以使用 DECLARE 语句初始化变量。
  • 在任何版本的 SQL Server 中,可以使用 SET 语句分配单个值(标量)。
  • 在任何版本的 SQL Server 中,都可以使用 SELECT 语句向变量赋值。 请确保 SELECT 语句只返回一行。 空结果将使变量保留其原始值;多个结果将返回最后一个结果。

以下示例演示了向变量声明和分配值的三种方法:

DECLARE @var1 AS INT = 99;
DECLARE @var2 AS NVARCHAR(255);
SET @var2 = N'string';
DECLARE @var3 AS NVARCHAR(20);
SELECT @var3 = lastname FROM HR.Employees WHERE empid=1;
SELECT @var1 AS var1, @var2 AS var2, @var3 AS var3;
GO

这会生成以下结果。

var1 var2 var3
99 字符串 戴维斯

小窍门

有关局部变量的完整指南,请参阅 T-SQL 参考文档

使用同义词

在 SQL Server 中,同义词提供了一种创建链接或别名的方法,可以连接到存储在同一数据库中或甚至在另一个 SQL Server 实例上的对象。 可能为其定义的同义词的对象包括表、视图、存储过程和用户定义的函数。

同义词可用于使远程对象显示为本地对象或提供本地对象的替代名称。 例如,同义词可用于在客户端代码与代码使用的实际数据库对象之间提供抽象层。 无论对象的实际名称如何,代码都按别名引用对象。

注释

可以创建指向尚不存在对象的同义词。 这称为延迟名称解析。 在运行时使用同义词之前,SQL Server 引擎不会检查实际对象是否存在。

若要管理同义词,请使用数据定义语言 (DDL) 命令 CREATE SYNONYM、ALTER SYNONYM 和 DROP SYNONYM,如以下示例所示:

CREATE SYNONYM dbo.ProdsByCategory FOR TSQL.Production.ProdsByCategory;
GO
EXEC dbo.ProdsByCategory @numrows = 3, @catid = 2;

若要创建同义词,必须具有“CREATE SYNONYM”权限以及更改将存储同义词的架构的权限。

注释

若要创建同义词,用户必须具有 CREATE SYNONYM 权限,并且必须在目标架构中拥有或具有 ALTER SCHEMA 权限。

同义词是在运行时引用时解析为源对象的“空”对象。