sql - 在 SQL Server 的存储过程中对变量执行多个值
问题描述
我正在尝试向 SQL Server 存储过程的参数添加多个值。
存储过程的名称是gpCompRes
,参数是@ProgramID
我需要添加 200 + 整数ProgramID
,我尝试过这样的事情
CREATE TYPE Programs as TABLE (Programs INT)
GO
DECLARE @ProgramID Programs INT
INSERT INTO @ProgramId
VALUES (12071), (66306)
EXEC gpCompRes @ProgramId = Programs,
@OrganisationId = 1122,
@UserIdList = 3326,
@ActionUserId = 2255;
GO
我尝试了另一个堆栈流中的另一个选项,这在我的情况下也不起作用,只是声明和插入值,但它不起作用。
谢谢
解决方案
Programs 是用户定义的表类型。在正确的脚本下方。
DROP TYPE IF EXISTS Programs
GO — From SQL 2016
CREATE TYPE Programs
AS TABLE (Program INT)
GO
DECLARE @ProgramIDs Programs — You must define @ProgramIDs variable as “Programs” type
INSERT INTO @ProgramIDs
VALUES (12071), (66306)
EXEC gpCompRes
@ProgramId = @ProgramIDs,
@OrganisationId = 1122,
@UserIdList = 3326,
@ActionUserId = 2255
GO
如果您将在程序中使用它,我建议您在 TABLE TYPE 定义中添加 PRIMARY KEY 和 NOT NULL CONSTRAINT 以避免重复和 NULL 值。
DROP TYPE IF EXISTS Programs
GO
CREATE TYPE Programs AS TABLE (Program INT NOT NULL PRIMARY KEY CLUSTERED)
GO
对于高性能应用程序,您还可以将其转换为 IN-MEMORY TABLE TYPE,如下所示:
DROP TYPE IF EXISTS Programs
GO
CREATE TYPE Programs AS TABLE (Program INT NOT NULL PRIMARY KEY CLUSTERED)
WITH ( MEMORY_OPTIMIZED = ON ) -From SQL Server 2014
文档: