首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MSSQL中使用INSERT INSERT CASE语句

在MSSQL中使用INSERT INSERT CASE语句
EN

Stack Overflow用户
提问于 2018-06-12 19:42:41
回答 2查看 350关注 0票数 0

我使用的是MSSQL。下面是我的sql代码

代码语言:javascript
复制
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

我尝试使用case语句在*IsApplicableToAllInternalUser *列值的基础上插入记录。但它会产生错误。

EN

回答 2

Stack Overflow用户

发布于 2018-06-12 20:59:44

现在,您只需将尝试执行的CASE语句替换为以下INSERT INTO .. SELECT语句:

代码语言:javascript
复制
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

只需先执行SELECT语句,就可以对要插入的记录进行初始测试。如果看起来没问题,您可以插入记录。

这也可以写成如下:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-06-13 23:17:49

下面的代码对我很有效。

代码语言:javascript
复制
 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50816321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档