Используйте INSERT в инструкции CASE в MSSQL - PullRequest
0 голосов
/ 12 июня 2018

Я использую MSSQL.Ниже мой SQL-код

DECLARE @CoursesAboutToExpire TABLE (CourseID   BIGINT, ExpiryDate  DATE, IsApplicableToAllInternalUser BIT)

INSERT INTO @CoursesAboutToExpire
    SELECT CourseID, ExpiryDate, IsApplicableToAllInternalUser
    FROM CMS_CoursesMaster CM

DECLARE @ApplicableUsersWithCourse TABLE (UserID    BIGINT, CourseID    BIGINT)


SELECT 1 ,
    (CASE WHEN CAE.IsApplicableToAllInternalUser = 1
        THEN (INSERT INTO @ApplicableUsersWithCourse SELECT UM.UserID, CAE.CourseID FROM TRC_UserMaster UM)
        ELSE (INSERT INTO @ApplicableUsersWithCourse SELECT CAP.UserID, CAP.CourseID FROM CMS_CourseApplicabilityParameters CAP WHERE CAP.CourseID=CAE.CourseID)
    ) AS 2
FROM @CoursesAboutToExpire CAE

Я пытаюсь вставить записи на основе значения столбца * IsApplicableToAllInternalUser *, используя оператор case.но это дает ошибку.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Ниже код работал для меня.

 DECLARE @CoursesAboutToExpire TABLE (CourseID   BIGINT, ExpiryDate  DATE, IsApplicableToAllInternalUser BIT)

INSERT INTO @CoursesAboutToExpire SELECT CourseID, ExpiryDate, IsApplicableToAllInternalUser FROM CMS_CoursesMaster CM

DECLARE @ApplicableUsersWithCourse TABLE (UserID BIGINT, CourseID BIGINT)

INSERT INTO @ApplicableUsersWithCourse SELECT UM.UserID, CAE.CourseID FROM TRC_UserMaster UM CROSS JOIN @CoursesAboutToExpire CAE WHERE CAE.IsApplicableToAllInternalUser = 1)

INSERT INTO @ApplicableUsersWithCourse SELECT CAP.UserID, CAP.CourseID FROM CMS_CourseApplicabilityParameters CAP INNER JOIN @CoursesAboutToExpire CAE ON CAP.CourseID=CAE.CourseID WHERE CAE.IsApplicableToAllInternalUser = 0

0 голосов
/ 12 июня 2018

Теперь вы можете просто заменить оператор CASE, который вы пытаетесь выполнить, на следующие INSERT INTO .. SELECT операторы:

DECLARE @ApplicableUsersWithCourse TABLE (UserID    BIGINT, CourseID    BIGINT)

INSERT INTO @ApplicableUsersWithCourse 
SELECT UM.UserID, CAE.CourseID 
FROM TRC_UserMaster UM JOIN @CoursesAboutToExpire CAE ON UM.CourseID = CAE.CourseID 
WHERE CAE.IsApplicableToAllInternalUser = 1

INSERT INTO @ApplicableUsersWithCourse 
SELECT CAP.UserID, CAP.CourseID 
FROM CMS_CourseApplicabilityParameters CAP JOIN @CoursesAboutToExpire CAE ON CAP.CourseID=CAE.CourseID
WHERE CAE.IsApplicableToAllInternalUser = 0

Сначала вы можете протестировать записи, которые вы собираетесь вставить, просто выполнив *Сначала 1005 * заявлений.Если все выглядит хорошо, вы можете вставить записи.

Это также можно записать следующим образом:

INSERT INTO @ApplicableUsersWithCourse 

SELECT UM.UserID, CAE.CourseID 
FROM TRC_UserMaster UM JOIN @CoursesAboutToExpire CAE ON UM.CourseID = CAE.CourseID 
WHERE CAE.IsApplicableToAllInternalUser = 1

UNION ALL

SELECT CAP.UserID, CAP.CourseID 
FROM CMS_CourseApplicabilityParameters CAP JOIN @CoursesAboutToExpire CAE ON CAP.CourseID=CAE.CourseID
WHERE CAE.IsApplicableToAllInternalUser = 0
...