首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SQL中插入多个行值

如何在SQL中插入多个行值
EN

Stack Overflow用户
提问于 2014-07-21 10:37:11
回答 2查看 82关注 0票数 0

我有以下3张表:

代码语言:javascript
运行
复制
CREATE TABLE Tests (
    Test_ID INT,
    TestName VARCHAR(50));

INSERT INTO Tests VALUES (1, 'SQL Test');
INSERT INTO Tests VALUES (2, 'C# Test');
INSERT INTO Tests VALUES (3, 'Java Test');


CREATE TABLE Users (
    [User_ID] INT,
    UserName VARCHAR(50));

INSERT INTO Users VALUES (1, 'Joe');
INSERT INTO Users VALUES (2, 'Jack');
INSERT INTO Users VALUES (3, 'Jane');



CREATE TABLE UserTests (
    ID INT,
    [User_ID] INT,
    Test_ID INT,
    Completed INT);

INSERT INTO UserTests VALUES (1, 1, 1, 0);
INSERT INTO UserTests VALUES (2, 1, 2, 1);
INSERT INTO UserTests VALUES (3, 1, 3, 1);
INSERT INTO UserTests VALUES (4, 2, 1, 0);
INSERT INTO UserTests VALUES (5, 2, 2, 0);
INSERT INTO UserTests VALUES (6, 2, 3, 0);
INSERT INTO UserTests VALUES (7, 3, 1, 1);
INSERT INTO UserTests VALUES (8, 3, 2, 1);
INSERT INTO UserTests VALUES (9, 3, 3, 1);

我想创建一些规则/触发器,以便当一个新用户被添加到user表时,每个Test的一个条目以及该用户的Id将被添加到UserTests表中。

如果新用户ID为5,则如下所示:

代码语言:javascript
运行
复制
INSERT dbo.UserTest
       (USER_ID, TEST_ID, Completed)
VALUES 
       (5, SELECT TEST_ID FROM Tests, 0)

当然,这种语法是错误的,但是给出一个我期望发生的事情的想法。

因此,我期望该语句将这些值添加到UserTests表中:

代码语言:javascript
运行
复制
User ID| Test ID| Completed 
5      | 1      | 0
5      | 2      | 0
5      | 3      | 0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-21 10:38:24

您可以在user表中使用after触发器。

代码语言:javascript
运行
复制
Create Trigger tr_user on Users 
After Insert 
AS Begin
   INSERT UserTest(USER_ID, TEST_ID, Completed)
   Select I.USER_ID, t.TEST_ID, 0
   From Inserted I, Tests t
END
票数 1
EN

Stack Overflow用户

发布于 2014-07-21 11:11:10

这里有一个SQL,它查找丢失的记录并插入它们。

SQL Fiddle

The SELECT

代码语言:javascript
运行
复制
select u.user_id, t.test_id, 0 as Completed
from users u 
cross join tests t
where not exists (
        select 1 
        from usertests ut 
        where ut.user_id = u.user_id and ut.test_id = t.test_id)

在select之前添加insert into UserTests (User_Id, Test_Id, Completed)将插入这些记录。

如果需要,可以将用户id添加到where子句中,以便对单个用户执行此操作。它是可重新运行的,所以它不会为一个已经拥有测试ids的用户重新插入测试ids,但是如果引入了新的测试,它将添加新的ids。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24863069

复制
相关文章

相似问题

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