如何在 SQL Server 中创建架构绑定存储过程

发布于

如果您曾经创建过架构绑定 UDF,您就会知道架构绑定只需添加到您的定义中即可。创建架构绑定视图时,这同样适用。WITH SCHEMABINDING

存储过程略有不同。

只有本机编译的存储过程才能绑定架构。事实上,本机编译的存储过程_必须是_架构绑定的。如果不进行架构绑定,则无法创建本机编译的存储过程。

但是,如果尝试模式绑定常规(非本机编译)过程,则会出现错误。

架构绑定存储过程的示例

下面是创建架构绑定(本机编译)存储过程的示例。

CREATE PROCEDURE dbo.usp_GetCowsByName @cowname varchar(70) WITH SCHEMABINDING, NATIVE_COMPILATION AS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N’us_english' )
SELECT CowId, CowName, Phone FROM dbo.Cows WHERE CowName = @cowname END;

GO

我已经包含了参数,但我也包含了 ,这表明该过程是本机编译的。WITH SCHEMABINDING``NATIVE_COMPILATION

还要注意块。这对于本机编译的存储过程是必需的。ATOMIC WITH

此代码创建了一个架构绑定存储过程。

错误?检查这些先决条件

本机编译的存储过程要求任何基础表都是内存优化表。

若要创建内存优化表,必须首先创建内存优化文件组。

下面是我用于创建内存优化文件组、其关联文件以及我在存储过程中引用的内存优化表的代码:

ALTER DATABASE Test ADD FILEGROUP imoltp_test CONTAINS MEMORY_OPTIMIZED_DATA; GO

ALTER DATABASE Test ADD FILE (name=‘imoltp_test1’, filename=’/var/opt/mssql/data/imoltp_test1.mdf’) TO FILEGROUP imoltp_test; GO

CREATE TABLE [dbo].[Cows]( [CowId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, [CowName] varchar NULL, [Phone] varchar NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) GO

因此,如果要复制并粘贴我的代码,则需要先运行它,然后再运行上面的存储过程代码。

另请注意,我使用的是 SQL Server for Linux,因此文件路径使用 Linux 约定。如果要在 Windows 上创建数据库文件,则需要将其更改为使用 Windows 文件路径约定(并确保使用系统上存在的文件路径)。