【问题标题】:Inserting row into table with auto increment value将行插入具有自动增量值的表中
【发布时间】:2011-03-23 09:15:59
【问题描述】:

我有一个表格 PartsMedia ,我可以在其中插入与产品相关的所有图像。 该表有列:

PartsMediaID  , auto-increment
PartsNo
MediaLink
MediaDescription
CatalogCode
SortCode

我想插入一个具有自动增量的完整行,并且 PartsNo 应该与 PartsMaster 表中的 PartsNo 相同。 媒体链接应该是 PartsNo + '-2.jpg' 媒体描述例如是“image2” CatalogCode 应该是“目录” 并且排序代码应该是'0'

从partsMaster 表中,我只需要PartNo,所以我可以将它添加到PartMedia 表中。 PartNo 是 PartMedia 表中的外键。

以下我到目前为止,但没有运气

 insert into dbo.PartsMedia (PartNo,MediaLink,MediaDescription,CatalogCode, SortCode)
 values (dbo.PartsMaster.PartNo, PartsMaster.PartNo+'-2.jpg','image2', 'catalog','0') 

我需要一些帮助。

亲切的问候,

【问题讨论】:

  • 您使用的是哪个数据库?在mysql中你需要在行上添加一个auto_increment ...
  • 你得到什么样的错误?您是否将 PartsMediaID 配置为自动增量和主键?
  • PartsmediaID 是主键,具有自增值,partsmedia 表中的 ParNo 应该是 PartsMaster 表中的 PartsNo 值

标签: c# asp.net sql


【解决方案1】:

我不清楚你真正想要什么。

但如果这是 MS SQL,并且您尝试覆盖标识列(作为自动增量),则需要告诉 Sql Server 您可以在标识列中插入新值:

SET IDENTITY_INSERT tablename ON

YOUR INSERT GOES HERE

SET IDENTITY_INSERT tablename OFF

【讨论】:

    【解决方案2】:

    您的插入语句缺少从 PartsMaster 表中获取正确行的选择子句。

                  insert into foo(a, b, c)
                  select x, y, z from T
    

    【讨论】:

    • 感谢您为我指明正确的方向:插入 PartsMedia(PartNo,MediaLink,MediaDescription,CatalogCode,SortCode) select partno, partno + '-3.jpg','afbeelding3','catalog' ,'0' 来自partmaster
    【解决方案3】:

    (警告:开发者假装对数据库一无所知)

    听起来您遇到了数据规范化问题。每个实体在您的数据库中应该只有一个 ID,并且只有像代理键 ID(对于该表)这样的东西自动递增才有意义。

    如果你想引用不同表中实体的 ID,你应该有一个外键约束,并且该列不应该是自动递增的。

    原因 - 如果将来您想要一个部件使用多个媒体(图像)怎么办?也许将来你会想要照片和视频。在这些情况下,您需要支持重复的PartsNo 值。

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 2012-05-29
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      相关资源
      最近更新 更多