【问题标题】:Column changes values when inserted into another table插入另一个表时列更改值
【发布时间】:2016-09-02 12:57:13
【问题描述】:

我有一个简单的查询,用于将数据从一个表传输到另一个表,但是当我从第二个表中选择值时,它会显示特定列中的下一个整数,该列在第一个表中具有 IDENTITY 约束,但它不会像它一样转移。

insert into Table2 (id, name, phone)
    select ID, Name, Phone 
    from Table1

Table1 的值为

1 John  123456
2 David 456789
3 Tony  547892

但在表 2 中显示

4 John  123456
5 David 456789
6 Tony  547892

如何避免 ID 列中的增量,而 Table2 ID 列没有 IDENTITY 约束?

【问题讨论】:

  • 它的 sql-server 不是 mysql
  • 您可能在表 2 上也有 IDENTITY;检查表结构,设置身份关闭,插入然后设置身份
  • table2 上的 IDENTITY 已关闭,我之前检查并确定了,我不想在 table2 上设置 IDENTITY
  • 当您说 select ID, Name, Phone from Table1 时,它是否返回 1,2,3,就像您期望插入的那样?

标签: sql sql-server


【解决方案1】:

有多种解决方案,但快速解决方法如下:

insert into Table2 (id, name, phone)
select (ID * 1)
       ,Name
       ,Phone 
from Table1

【讨论】:

    【解决方案2】:

    您可以强制 SQL 接受一个身份而不是生成它自己的身份 - 但请注意可能存在重复身份问题。

    set identity_insert table2 on
    
    insert into Table2 (id, name, phone)
    select ID, Name, Phone from Table1
    
    set identity_insert table2 off
    

    https://msdn.microsoft.com/en-CA/library/ms188059.aspx

    根据您的情况,另一种选择是发出 TRUNCATE TABLE table2 以在插入前擦除每一行 - 但这也会将标识重置为 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2014-07-06
      • 2016-11-15
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多