SQL 插入多行,一个静态值,一个变量值

SQL insert multiple rows with one static value, one variable ones

我们有一个具有以下设置的数据库:

SiteSecurityID | SiteID | LoginName
---------------+--------+-----------
Auto Gen #       Number   Username

现在,我们有 35 个站点 ID,每个用户都需要访问每个站点 ID。我无法获得我已尝试成功执行此操作的任何查询。

我可以用这个方法一个一个地做,但是必须有更简单的方法...

INSERT INTO SiteSecurity (SiteID, LoginName) 
VALUES ('1', 'user1'), ('2', 'user1');

您可以使用 cross join 生成所有行,假设您有站点和用户的表:

INSERT INTO SiteSecurity (SiteID, LoginName)
    SELECT s.SiteId, u.UserName
    FROM Sites s CROSS JOIN
         users u;

如果您不这样做,您仍然可以即时生成它们。 Table 构造函数因数据库而异,但这给出了方法:

INSERT INTO SiteSecurity (SiteID, LoginName)
    SELECT s.SiteId, u.UserName
    FROM (VALUES (1), (2), (3), . . . ) s(SiteID) CROSS JOIN
         (VALUES ('user1'),  ('user2'), . . . ) u(UserName);

编辑:

如果您有现有数据,可以在插入前过滤掉重复数据:

INSERT INTO SiteSecurity (SiteID, LoginName)
    SELECT s.SiteId, u.UserName
    FROM (VALUES (1), (2), (3), . . . ) s(SiteID) CROSS JOIN
         (VALUES ('user1'),  ('user2'), . . . ) u(UserName) LEFT JOIN
         SiteSecurity ss
         ON ss.SiteId = s.SiteId AND ss.LoginName = u.UserName
    WHERE ss.SiteId IS NULL;