【问题标题】:Need SQL help with copying rows在复制行时需要 SQL 帮助
【发布时间】:2011-01-21 22:09:42
【问题描述】:

我有一个包含一堆列的表。

有一个主键是作为 int 数据类型的 ID,并且没有外键。此 PK 使用身份规范设置,增量和种子都设置为 1,无论这意味着什么。对于 Not For Replication,它设置为 Yes。还有另外两行很重要,数据的年份和参考编号,我将使用这两行来专门选择要复制的行。

有没有什么方法可以使用 SQL 或 SQL 和 C# 的组合来通过引用编号复制一组特定的行,并为每一行单独分配一个唯一的主键 ID?每次复制的行数可能不同,因此需要灵活。正如在系统中选择 ID 时没有任何麻烦,或者让它可能获得最大 ID,并为复制的每一行或其他任何内容将其增加一。我还将在列中添加新的一年,但这与通过此类列的 SQL 语句自行为每一行设置主键 ID 的主要问题相比,这很容易......

请帮忙!我不是一个完全的 SQL 新手,但我仍在学习,以前从未遇到过特定的 Not For Replication 等问题。

【问题讨论】:

  • Seed = 1 表示从 1 开始,increment 表示每个值应增加 1

标签: c# sql sql-server copy


【解决方案1】:

由于您的主键是标识列,您可以选择所需的行(除了不选择标识列)并将它们重新插入到同一个表中:

INSERT INTO table1 (col1, col2, col3)
SELECT (col1, col2, col3) FROM table1
WHERE ....

【讨论】:

  • 不起作用,因为我已经尝试过了,我将该表的 Identity_insert 设置为...然后代码...然后关闭,我使用该错误:必须指定显式值当 IDENTITY_INSERT 设置为 ON 或复制用户插入 NOT FOR REPLICATION 标识列时,用于表“表”中的标识列。
  • Welp 我是个白痴,我们走了...我实际上阅读了错误...有效...我留下该评论以便其他人可以嘲笑我。
【解决方案2】:

如果您不想一一添加所有列,而只是排除主要标识列,您可以使用以下内容。

假设您的表的名称是entity

-- Copy row without Id
SELECT * INTO TempTable FROM entity WHERE entity_id = 1; // AND OTHER CONDITIONS
ALTER TABLE TempTable DROP COLUMN entity_id;
INSERT INTO entity SELECT * FROM TempTable;
DROP TABLE TempTable;

我经常使用它来复制具有很多列的表中的行。

【讨论】:

    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多