【问题标题】:With TSQL, How do I insert NEW record in Table2 from existing record in Table1 and generate NEWID使用 TSQL,如何从表 1 中的现有记录中插入表 2 中的新记录并生成 NEWID
【发布时间】:2016-02-17 20:47:52
【问题描述】:

表 1 包含工作订单,表 2 包含安装人员。我想在 Table2 中为 Table1 中的工单 3906 插入一条记录。表的索引使得 Table1GUID = Table2GUID。目前 Table1GUID 对于 3906 为 NULL,因为 Table2 中没有相应的记录,所以我猜我需要为 Table1GUID 生成 NEWID(),然后在 Table2 中插入新记录,以便两个表中的记录具有相同的 GUID?

下面是抛出错误消息 547 UPDATE 语句与 FOREIGN KEY 约束冲突。如何在 Table1 中创建 NEWID 并插入到 Table2 中?

UPDATE Document SET Table1GUID = NEWID() WHERE WONumber = '3906'

以下 2 个中哪一个最适合在 Table2 中创建记录?

INSERT INTO Table2 (Table2GUID)
SELECT Table1GUID FROM Table1
WHERE Table1.WOnumber = '3906'

INSERT INTO Table2 (Table2GUID)
SELECT Table1GUID FROM Table1
INNER JOIN Table2 ON Table2GUID = Table1GUID
WHERE Table1.WOnumber = '3906'

【问题讨论】:

  • 我们不知道你的外键结构,所以很难确定。但是您发布的第二个根本没有任何意义。您正在插入 Table2 ,因此加入它不起作用,因为您尚未创建该行。不清楚您要做什么,您也可以查看 OUTPUT 子句。我怀疑这可能是你想要的。
  • 记录存在于表 1(工单 3096)中,但尚未分配安装程序(表 2)。我需要在 Table2 中创建一条新记录,该记录链接(即相同的 GUID)以记录在 Table1 中的工单 3906
  • 如果在插入 Table1 时需要这样做,我建议使用 OUTPUT。如果需要稍后完成,则可以使用查询从 Table1 获取 guid 的值(您的第一个示例)。这有帮助吗?
  • 我的问题是如何在 Table2 中创建一条新记录,该记录链接到 Table1 中 Table1GUID 为 NULL 的现有记录

标签: sql-server database sql-server-2008


【解决方案1】:

由于列存储NULL 而你没有Table2 中有对应的行,加入没有意义。尝试添加您已经提到的过滤谓词并将NULL 值替换为newid()

set @new_id = newid()

INSERT INTO Table2 (Table2GUID)
SELECT @new_id
FROM Table1 t1
WHERE t1.WOnumber = '3906'
  and t1.Table1GUID is NULL

UPDATE t1 SET
  Table1GUID = @new_id
FROM Table1 t1
WHERE t1.WOnumber = '3906'
  and t1.Table1GUID is NULL

如果这些更改必须是多记录的,您将需要一些其他方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多