Как вставить в таблицу на основе многострочного подзапроса? - PullRequest
1 голос
/ 19 апреля 2019

У меня есть Dashboard_Diagram таблица:

CREATE TABLE Dashboard_Diagram
(
    diagram_id TINYINT,
    name VARCHAR(50)
)

INSERT INTO Dashboard_Diagram
    SELECT 1, 'Radar'
    UNION ALL
    SELECT 2, 'Bar'
    UNION ALL
    SELECT 3, 'Pie'

У меня есть Dashboard_Configuration таблица:

CREATE TABLE SomeTable
(
    user_id UNIQUEIDENTIFIER,
    diagram_id TINYINT
)

И @user_id:

DECLARE @user_id UNIQUEIDENTIFIER = 'E4F77F2C-8AA1-493A-94A3-03EA212453D4'

Я хочу динамически вставлять строки в Dashboard_Configuration, основываясь на строках в Dashboard_Diagram.Статически это будет выглядеть так:

INSERT INTO Dashboard_Configuration
@userId, 1
. . . 

Я пытался:

INSERT INTO Dashboard_Configuration
@user_id, (SELECT diagram_id FROM Dashboard_Diagram)

Но это выдает ошибку, потому что подзапрос возвращает более одного значения:

Сообщение 512, Уровень 16, Состояние 1, Строка 7
Подзапрос вернул более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Как вставить в таблицу на основена динамическое количество строк из другой таблицы?

1 Ответ

3 голосов
/ 19 апреля 2019

Использование insert . . . select:

INSERT INTO Dashboard_Configuration (User_id, name)
    SELECT @user_id, name
    FROM Dashboard_Diagram;

Обратите внимание, что здесь также явно указаны столбцы. Имена могут быть неправильными (вы не указываете их в вопросе), но рекомендуется перечислять столбцы.

EDIT:

Существует конфликт типов выше. Вы действительно намерены это сделать?

INSERT INTO Dashboard_Configuration (User_id, diagram_id)
    SELECT @user_id, dd.diagram_id
    FROM Dashboard_Diagram dd;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...