如何在 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 文件路径约定(并确保使用系统上存在的文件路径)。