SQL插入相关表

标签 sql sql-server insert

在我看来,这似乎是 SQL/数据库开发中经常出现的问题,但我对这一切都是新手,所以请原谅我的无知。

我有 2 张 table :

CREATE TABLE [dbo].[Tracks](
    [TrackStringId] [bigint] NOT NULL,
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [Time] [datetime] NOT NULL,
 CONSTRAINT [PK_Tracks] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
        IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON,
        ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Tracks] CHECK CONSTRAINT [FK_Tracks_AudioStreams]
GO

ALTER TABLE [dbo].[Tracks]  WITH CHECK ADD  CONSTRAINT
[FK_Tracks_TrackStrings]     FOREIGN KEY([TrackStringId])
REFERENCES [dbo].[TrackStrings] ([Id])
GO

ALTER TABLE [dbo].[Tracks] CHECK CONSTRAINT [FK_Tracks_TrackStrings]
GO

CREATE TABLE [dbo].[TrackStrings](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [String] [nvarchar](512) NOT NULL,
 CONSTRAINT [PK_Strings] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
        IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON,
        ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我想在轨道表中插入一个新条目。这还涉及在 trackstrings 表中插入新条目,并确保轨道中的外键列 trackstringid 指向 trackstring 中的新条目。实现这一目标最有效的方法是什么?

最佳答案

首先,插入到 TrackStrings 中,并从列列表中省略主键列。这将调用其 IDENTITY 列,该列会自动生成一个值。

INSERT INTO [dbo].[TrackStrings] ([String]) 
  VALUES ('some string');

其次,插入 Tracks 并将函数 SCOPE_IDENTITY() 指定为其 TrackStringId ,它返回当前范围内的 IDENTITY 列生成的最新值

INSERT INTO [dbo].[Tracks] ([TrackStringId], [Time]) 
  VALUES (SCOPE_IDENTITY(), CURRENT_TIMESTAMP());

关于SQL插入相关表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/322601/

相关文章:

sql - 了解 PostgreSQL 和 plpgsql 防御代码注入(inject)

mysql - 如何存储嵌套位置?

php - SQL - 添加列值单表

sql-server - 无法从 SQL Azure 生成脚本

mysql - 将 int 从类插入数据库(mysql)

MySQL(SQLite): insert rows based on a query with multiple rows result

sql - 在 INSERT 语句中使用类型转换和条件插入到表中

php - Mysql计数并拆分为日、周、年以在同一查询中进行统计

php - 如何在我的网站上显示数据库信息?

SQL 按选择分组