Выполнить инструкцию Insert в зависимости от строк, полученных из select - PullRequest
0 голосов
/ 12 октября 2018

У меня есть оператор выбора, например

SELECT
    [TaskStatusName],
    [TaskTypeName],
    [TaskId]
FROM
    [TaskStatusAudit]
WHERE
    [TaskId] IN
    (
        SELECT
            [T].[TaskId]
        FROM
            [Task] AS [T]
        WHERE
            [T].[DesignKey] = @LastDesignKeyOfProject
            AND
            [TaskStatusId] != @PendingStatus
            AND
            [TaskStatusId] != @CompletedStatus
    )

Ниже этого у меня есть оператор вставки:

INSERT INTO [TaskStatusAudit]
(
    [TaskStatusAuditId],
    [Date],
    [EmpGuid],
    [TaskStatusName],
    [TaskTypeName],
    [TaskId]
)
VALUES
(
    @TaskStatusName,
    @TaskTypeName,
    @TaskId
)

У меня вопрос, как я могу выполнить это значение вставки foreach или строку I?получаю в моем первом выборе?С уважением

ОБНОВЛЕНИЕ

Как комментарии ниже, я пытаюсь сделать так:

  DECLARE @TaskStatusName VARCHAR(255)
                , @TaskTypeName   VARCHAR(255)
                , @TaskId         UNIQUEIDENTIFIER;

     --Assigning pararameters
   SELECT
                 @TaskStatusName = 'COMPLETED'
                , @TaskTypeName = [TaskTypeName]
                , @TaskId = [T].[TaskId]
                 FROM [TaskStatusAudit] AS [TSA]
                     INNER JOIN [Task] AS [T] ON [T].[DesignKey] = @LastDesignKeyOfProject
                                            AND [T].[TaskStatusId] != @PendingStatus
                                            AND [T].[TaskStatusId] != @CompletedStatus
            -- using parameters to insert
            INSERT INTO [TaskStatusAudit]
            (
                 [TaskStatusAuditId]
                , [Date]
                , [EmpGuid]
                , [TaskStatusName]
                , [TaskTypeName]
                , [TaskId]
            )
            VALUES
                (
                 NEWID()
                , @Today
                , @CreatedBy
                , @TaskStatusName
                , @TaskTypeName
                , @TaskId
                )

Я запускаю его, но он вставляет только одну строку вместо нескольких.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Параметры хранят отдельные значения.Он будет вставлен только один, как и ожидалось.Код ниже должен работать;

INSERT INTO [TaskStatusAudit]
(
     [TaskStatusAuditId]
    ,[Date]
    ,[EmpGuid]
    ,[TaskStatusName]
    ,[TaskTypeName]
    ,[TaskId]
)            
    SELECT
        NEWID(), 
        GETDATE(),
        @CreatedBy,
        'COMPLETED',
        [TaskTypeName]
        [TaskId]
        FROM [TaskStatusAudit] AS [TSA]
            INNER JOIN [Task] AS [T] ON [T].[DesignKey] = @LastDesignKeyOfProject
                                AND [T].[TaskStatusId] != @PendingStatus
                                AND [T].[TaskStatusId] != @CompletedStatus

Вы можете проверить синтаксис 'INSERT INTO SELECT' с здесь

0 голосов
/ 12 октября 2018

Используйте INSERT INTO SELECT FROM.

Кроме того, я упростил ваше SELECT, чтобы использовать INNER JOIN вместо WHERE x IN ( SELECT y ).

INSERT INTO [TaskStatusAudit] 
(
    [TaskStatusAuditId],
    [Date],
    [EmpGuid],
    [TaskStatusName],
    [TaskTypeName],
    [TaskId]
)
SELECT
    @auditId,
    GETUTCDATE(),
    @empGuid
    [TaskStatusName],
    [TaskTypeName],
    [TaskId]
FROM
    [TaskStatusAudit] AS A
    INNER JOIN [Task] ON
        [Task].DesignKey = @LastDesignKeyOfProject AND
        A.[TaskStatusId] != @PendingStatus AND
        A.[TaskStatusId] != @CompletedStatus
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...