我想为每个插入语句提供一个唯一的ID,这样我就可以看到哪些行一起插入了。我更喜欢独特的"插入ID"从1开始,像行IDENTITY(1,1)
一样增加1。
有IDENTITY
这样的简单方法吗?
CREATE TABLE [dbo].[factTrade]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[insertedID] [int] NOT NULL,
[quantity] [int] NOT NULL,
[price] [decimal](20, 10) NOT NULL
)
INSERT INTO [dbo].[factTrade] ([insertedID], [quantity], [price])
VALUES (1, 6, 2.5), (1, 4, 3.7), (1, 3, 4.1), (1, 7, 8.5),
INSERT INTO [dbo].[factTrade] ([insertedID], [quantity], [price])
VALUES (2, 5, 5.2), (2, 1, 4.6)
答案 0 :(得分:1)
这不是您要求的解决方案,但您可以添加一个带有默认时间戳的列来查找同时插入的所有行。
ALTER TABLE dbo.factTrade
ADD InsertDate DATETIME NOT NULL DEFAULT (GETDATE())
答案 1 :(得分:1)
Guids对于类似的东西很方便。
declare @insertid uniqueidentifier = newid();
CREATE TABLE [dbo].[factTrade](
[ID] [int] IDENTITY(1,1) NOT NULL,
[insertedID] [int] NOT NULL,
[quantity] [int] NOT NULL,
[price] [decimal](20, 10) NOT NULL,
[insertid] [uniqueidentifier] not null
)
INSERT INTO [dbo].[factTrade]
([insertedID]
,[quantity]
,[price]
,[insertid]
)
VALUES
(1, 6, 2.5,@insertid),
(1, 4, 3.7,@insertid),
(1, 3, 4.1,@insertid),
(1, 7, 8.5,@insertid)
set @insertid = newid(); --get another guid
INSERT INTO [dbo].[factTrade]
([insertedID]
,[quantity]
,[price]
,[insertid]
)
VALUES
(2, 5, 5.2,@insertid),
(2, 1, 4.6,@insertid)
答案 2 :(得分:0)
如果需要整数值,则可以创建另一个表:
CREATE TABLE inserts ([ID] INT IDENTITY(1,1)...)
然后从您的应用中插入一行,然后使用生成的标识值(SCOPE_IDENTITY()
)。
INSERT inserts DEFAULT VALUES;
SELECT @insertId = SCOPE_IDENTITY();
答案 3 :(得分:0)
这就是我最终要做的,感谢您提出的所有建议和意见。
DECLARE @insertedID INT
CREATE TABLE [dbo].[factTrade]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[insertedID] [int] NOT NULL,
[quantity] [int] NOT NULL,
[price] [decimal](20, 10) NOT NULL
)
CREATE SEQUENCE [dbo].[factTradeInsertedID] AS INT
START WITH 1
INCREMENT BY 1
SET @insertedID = NEXT VALUE FOR [dbo].[factTradeInsertedID] --1
INSERT INTO [dbo].[factTrade]
([insertedID]
,[quantity]
,[price])
VALUES
(@insertedID, 6, 2.5)
,(@insertedID, 4, 3.7)
,(@insertedID, 3, 4.1)
,(@insertedID, 7, 8.5)
SET @insertedID = NEXT VALUE FOR [dbo].[factTradeInsertedID] --2
INSERT INTO [dbo].[factTrade]
([insertedID]
,[quantity]
,[price])
VALUES
(@insertedID, 5, 5.2)
,(@insertedID, 1, 4.6)