Выполнить несколько значений переменной в хранимой процедуре на SQL сервере - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь добавить несколько значений к параметру хранимой процедуры SQL сервера.

Имя хранимой процедуры 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

Я попробовал другой вариант из другого потока стека, который также не работает в моем случае, чтобы просто объявить и вставить значения, но не сработало.

Спасибо

1 Ответ

1 голос
/ 13 июля 2020

Программы - это тип таблицы, определяемый пользователем. Ниже правильный скрипт.

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

Если вы будете использовать его в программе, я советую вам добавить PRIMARY KEY и NOT NULL CONSTRAINT в определение TABLE TYPE, чтобы избежать дублирования и значений NULL.

DROP TYPE IF EXISTS Programs
GO

CREATE TYPE Programs AS TABLE (Program INT NOT NULL PRIMARY KEY CLUSTERED)
GO

Для высокопроизводительных приложений вы также можете преобразовать его в ТИП ТАБЛИЦЫ В ПАМЯТИ, как показано ниже:

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

Документация:

ТИП ТАБЛИЦЫ

ТИП ТАБЛИЦЫ ОПТИМИЗИРОВАННОЙ ПАМЯТИ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...