首页 > 解决方案 > 在 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

我尝试了另一个堆栈流中的另一个选项,这在我的情况下也不起作用,只是声明和插入值,但它不起作用。

谢谢

标签: sqlsql-server

解决方案


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

文档:

表类型

内存优化表类型


推荐阅读