光之远征团跨服战

创建本机编译的存储过程 - SQL Server

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

本地编译的存储过程不支持完整的 Transact-SQL 可编程性和查询功能范围。 某些 Transact-SQL 构造不能在本机编译的存储过程内使用。 有关详细信息,请参阅 本机编译的 T-SQL 模块支持的功能。

本机编译存储过程仅支持以下 Transact-SQL 功能:

原子块。 有关详细信息,请参阅 Atomic Blocks。

NOT NULL 对参数和变量的约束。 不能将 NULL 值分配给声明为 NOT NULL的参数或变量。 有关详细信息,请参阅 DECLARE @local_variable (Transact-SQL)。

CREATE PROCEDURE dbo.myproc (@myVarchar VARCHAR(32) NOT NULL) AS (...)

DECLARE @myVarchar VARCHAR(32) NOT NULL = "Hello"; -- Must initialize to a value.

SET @myVarchar = NULL; -- Compiles, but fails during run time.

本机编译的存储过程的架构绑定。

本机编译的存储过程是使用 CREATE PROCEDURE (Transact-SQL) 创建的。 下面的示例显示内存优化表以及用于将行插入表的本机编译存储过程。

CREATE TABLE [dbo].[T2] (

[c1] [int] NOT NULL,

[c2] [datetime] NOT NULL,

[c3] nvarchar(5) NOT NULL,

CONSTRAINT [PK_T1] PRIMARY KEY NONCLUSTERED ([c1])

) WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )

GO

CREATE PROCEDURE [dbo].[usp_2] (@c1 int, @c3 nvarchar(5))

WITH NATIVE_COMPILATION, SCHEMABINDING

AS BEGIN ATOMIC WITH

(

TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'

)

DECLARE @c2 datetime = GETDATE();

INSERT INTO [dbo].[T2] (c1, c2, c3) values (@c1, @c2, @c3);

END

GO

在代码示例中, NATIVE_COMPILATION 指示此 Transact-SQL 存储过程是本机编译的存储过程。 以下选项是必需的:

选项

说明

SCHEMABINDING

本机编译的存储过程必须绑定到其引用的对象的架构。 这意味着不能删除该过程引用的表。 在该过程中引用的表必须包括其架构名称,并且在查询中不允许使用通配符 (*)(意味着没有 SELECT * from...)。 此版本 SQL Server 中的本机编译存储过程仅支持 SCHEMABINDING。

BEGIN ATOMIC

本机编译的存储过程正文必须由恰好一个原子块构成。 原子块确保存储过程的原子执行。 如果在非活动事务上下文中调用该存储过程,它将启动一个新事务,该事务将在原子块结束时提交。 本机编译的存储过程中的原子块有两个必选选项:

TRANSACTION ISOLATION LEVEL。 有关支持的隔离级别的信息,请参阅 内存优化表的事务隔离级别 。

LANGUAGE。 存储过程的语言必须设置为可用语言或语言别名之一。

另请参阅

本机编译的存储过程

世界杯小组赛竞彩攻略 80场赛事投注策略指南
《饥荒联机版》变异机制详解


最新发表

友情链接