SQL Server: создание процедуры для вставки нескольких значений в таблицу одновременно, не зная заранее сколько - PullRequest
0 голосов
/ 24 декабря 2018

Как я могу создать процедуру, которая будет вставлять несколько значений в таблицу (которые являются идентификаторами песен), в зависимости от того, сколько значений я (или пользователь) хочу поместить в таблицу одновременно, другими словами - беззная, сколько ценностей заранее?
(не зная много песен, которые пользователь выберет для вставки).

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

Пользовательский интерфейс React Native, и я работаю с C # WebService .

Мой стол:

CREATE TABLE [Playlists_Songs]
(
    SongID INT NOT NULL 
        FOREIGN KEY REFERENCES [Songs](Song_ID),
    PlaylistID INT NOT NULL 
        FOREIGN KEY REFERENCES [Playlists](Playlist_ID)
    PRIMARY KEY (SongID, PlaylistID)
)

Процедура, которую я хочу изменить:

CREATE PROC Add_Playlist_Songs
@songID int, --- don't know how many @songID's will be chosen by the user to insert in.
@playlistID int 
AS
BEGIN
INSERT INTO [site15].[Playlists_Songs] ([PlaylistID], [SongID])
VALUES (@songID , @playlistID)
END

GO

Таблица песен:

songs table

Есть предложения?

PS

У меня есть только процедура для создания списка воспроизведения с идентификатором пользователя, именем и изображением списка воспроизведения.

Если вам нужна дополнительная информация или редактирование вопроса, пожалуйста, сообщите мне.

1 Ответ

0 голосов
/ 24 декабря 2018

Попытайтесь увидеть Табличные Значения. Как сказано в MSDN:

Табличные параметры объявляются с использованием пользовательских типов таблиц.Вы можете использовать табличные параметры для отправки нескольких строк данных в инструкцию Transact-SQL или подпрограмму, такую ​​как хранимая процедура или функция, без создания временной таблицы или множества параметров.

СоздатьUser defined Table Type:

CREATE TYPE dbo.SongIds
AS TABLE
(
  ID int
);

Затем просто используйте этот параметр и другие параметры в ваших хранимых процедурах:

CREATE PROC Add_Playlist_Songs
@SongIds AS dbo.SongIds READONLY
@playlistID int 
AS
BEGIN
    INSERT INTO [site15].[Playlists_Songs] ([PlaylistID], [SongID])
    SELECT 
      s.ID
    , playlistID 
    FROM @SongIds s

END

GO

Пример вызова:

DECLARE @SongIds  SongIds;
DECLARE @playlistID INT = 5

INSERT INTO @SongIds
(
    ID
)
VALUES
 (1)
,(2)
,(3)

EXEC Add_Playlist_Songs @SongIds , @playlistID 
...