代码之家  ›  专栏  ›  技术社区  ›  BarrettJ

将表格与早期版本合并

sql
  •  0
  • BarrettJ  · 技术社区  · 15 年前

    我们升级了一个以前使用Access,现在使用SQL的专有程序。表模式完全相同,但问题是当我们切换到SQL时,主键重新启动。我已经将旧的Access数据库导入到数据库中的另一个SQL表中。当前(基于SQL)表名为archive,导入的访问表名为archivepresql。我要做的是创建一个连接这两个表的查询(所以我在一个查询中拥有所有记录),如果主键来自SQL表,则向它添加“s”,如果主键来自导入的访问表,则向它添加“a”。可以这样做吗?

    我可以得到这样的第一块数据,但我不确定如何将其与第二个表连接起来,这是我想要的。

    选择's'+cast(id as varchar(max))作为id、account、billingnumber、takentimestamp 从存档

    非常感谢您的帮助!

    5 回复  |  直到 15 年前
        1
  •  2
  •   Quassnoi    15 年前

    如果集合不相交, UNION ALL 它们:

      SELECT 'S' + CAST(id AS varchar(MAX)) AS id, Account, BillingNumber, TakenTimestamp
      FROM Archive
      UNION ALL
      SELECT 'A' + CAST(id AS varchar(MAX)) AS id, Account, BillingNumber, TakenTimestamp
      FROM ArchivePreSQL
    
        2
  •  2
  •   OMG Ponies    15 年前
    SELECT a.id, 
          'A',
           a.account, 
           a.billingnumber, 
           a.takentimestamp
      FROM ARCHIVE a
    UNION ALL
    SELECT b.id,
          'B',
           b.account, 
           b.billingnumber, 
           b.takentimestamp
      FROM ARCHIVEPRESQL b
     ORDER BY id
    

    我不建议在身份证前加前缀,因为这样你就不能按它来订购了。

        3
  •  1
  •   Adam Batkin    15 年前

    我想你想用 UNION . 理念与 UNION 你有两套(或更多)的 SELECT 语句,这两个语句都将返回具有相同类型的列的确切数目,然后将它们连接在一起。

    例如:

    SELECT 'S' + CAST(id AS varchar(MAX)) AS id, Account, BillingNumber, TakenTimestamp FROM Archive
    UNION SELECT 'A' + CAST(id AS varchar(MAX)) AS id, Account, BillingNumber, TakenTimestamp FROM ArchivePreSQL
    
        4
  •  1
  •   Stephen Wrighton    15 年前

    是的,你可以这样做,而且可以通过工会来完成

    SELECT 'S' + CAST(id AS varchar(MAX)) AS id, Account, BillingNumber, TakenTimestamp FROM Archive
    union
    SELECT 'A' + CAST(id AS varchar(MAX)) AS id, Account, BillingNumber, TakenTimestamp FROM ArchivePreSQL
    

    另一种选择是用高于archivepresql表最高标识的数字作为存档标识符的种子。假设在archivepresql中有522行,然后将archive表的种子设定为1000。然后,您知道任何低于1000的标识符都在archivepresql表中,而不是在archive表中。

    另外,不要忘记,您可以临时禁用identity insert功能并执行插入(包括标识符),然后重新启用identity insert功能(这是生成自动递增标识符字段的功能),这将允许您完全摆脱archivepresql表。如果需要知道这一点,那么您可以将其与重置标识插入种子值结合起来,这样新项目总是在设置的数量之上。

        5
  •  0
  •   Simon Nickerson    15 年前

    使用 UNION 关键字

    
    SELECT 'S' + CAST(id AS varchar(MAX)) AS id,
           Account,
           BillingNumber,
           TakenTimestamp
    FROM Archive
    UNION
    SELECT 'A' + CAST(id AS varchar(MAX)) AS id,
           Account,
           BillingNumber,
           TakenTimestamp
    FROM ArchivePreSql