将表与先前版本连接

时间:2009-08-25 15:38:06

标签: sql

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

我可以得到这样的第一个数据块,但我不确定如何用第二个表格加入我想要的数据。

SELECT'S'+ CAST(id AS varchar(MAX))AS id,Account,BillingNumber,TakenTimestamp 来自档案

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:2)

如果集合不相交,只需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

答案 1 :(得分:2)

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

我不建议为ID添加前缀,因为您无法按顺序排序。

答案 2 :(得分:1)

我想你想使用UNIONUNION的想法是你有两个(或更多)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

答案 3 :(得分:1)

是的,您可以这样做,并且可以通过联盟

完成
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表的最高标识更高的数字为ARCHIVE标识符设定种子。假设您在ArchivePreSQL中有522行然后将ARCHIVE表播种到1000.然后您知道1000以下的任何标识符都在ArchivePreSql表中而不是存档表。

另外,不要忘记您可以暂时禁用IdentityInsert功能并执行插入(包括标识符),然后重新启用Identity Insert功能(生成自动递增标识符字段的那个),这将是允许你完全摆脱ArchivePreSQL表。如果这是需要知道的问题,那么您可以将其与重置标识插入种子值相结合,以便新项目始终高于设定数量。

答案 4 :(得分:0)

使用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