【问题标题】:INSERT with the same data in different tables在不同的表中插入相同的数据
【发布时间】:2011-04-05 00:10:42
【问题描述】:

我有两张桌子,一张叫PROJETO (id_projeto, id_tipo_projeto, descr_projeto, versao_projeto),另一张叫TIPO_PROJETO (id_tipo_projeto, descricao_tipo)

我想同时对两张表执行INSERT,这样两张表中的id_tipo_projeto字段值相同。

这是要存储在表中的数据示例...

Table PROJETO
--------------------------------------------------------------
| id_projeto        = 1                                      |
| **id_tipo_projeto = 5                                      |
| descr_projeto     = 'design will be sought for the sector' |
| versao_projeto    = 1.0                                    |
--------------------------------------------------------------

Table TIPO_PROJETO
-------------------------------------------
| **id_tipo_projeto = 5                   |
| descricao_tipo    = 'Industrial Design' |
-------------------------------------------

有人可以帮我写这样的查询吗?我正在使用 SQL Server。

【问题讨论】:

    标签: sql-server insert sql-insert


    【解决方案1】:

    最好在事务中按顺序完成。希望同时插入是不现实的。

    DECLARE @id INT
    
    BEGIN TRANS
    
        INSERT INTO [PROJETO]
            (id_projeto, descr_projeto, versao_projeto)
        VALUES
            (1,'design ... etc', 1.0)
    
        SET @id = SCOPE_IDENTITY()
    
        INSERT INTO [TIPO_PROJETO]
            (id_tipo_projeto, descricao_tipo)
        VALUES
            (@id, 'Idustrial Design')
    
        IF @@ERROR <> 0
            ROLLBACK TRANS
    
    COMMIT TRANS
    

    第一个表应该有一个主键标识列,第二个只是一个主键,它将使用 SCOPE_IDENTITY 根据第一个插入的 ID 插入。

    如果第二次插入出错,事务将回滚。这只是预防措施,您可以在 if/else 语句中添加错误处理以报告插入失败。

    【讨论】:

    • 字段 id_tipo_projeto 表 PROJECT 呢?在您的示例代码中,它不再出现。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多