2017-09-03 70 views
1

我正在使用mssql。 插入記錄後,我想獲取數據的ID。 但我不知道那麼做。 我的代碼如下。 請給我答案。[Azure/mssql]我如何獲得插入查詢記錄集

var mssql = require('mssql'); 
mssql.connect(config.mssql, function(err) { 
var request = new mssql.Request(); 
request.query('insert -----'),function(err, data) { 
    console.log(data); 
} 

插入工作正常,但控制檯日誌[未定義] ...


這是表的DDL

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo]。[Feature](
[id] nvarchar NOT NULL CONSTRAINT [DF_Feature_id] DEFAULT(CONVERT(nvarchar,newid(),(0))),
[createdAt] datetimeoffset NOT NULL CONSTRAINT [DF_Feature_createdAt] DEFAULT(CONVERT(datetimeoffset,sysutcdatetime(), 0))),
[updatedAt] DATETIMEOFFSET NULL,
[版] [時間戳] NOT NULL,
[刪除] [比特] NULL DEFAULT((0)),
[標題] nvarchar的NULL,
[text] nvarchar NULL,
[period_from] datetimeoffset NULL,
[period_to] datetimeoffset NULL,
[優先] [浮子] NULL,
PRIMARY KEY NONCLUSTERED

[ID] ASC
)WITH(STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF)

GO

+2

對於單身插入,你可以添加'SELECT SCOPE_IDENTITY()'在同一的'INSERT'後聲明批量。或者,指定一個'OUTPUT'子句(OUTPUT inserted.ID)),它也可以處理多行插入。請參閱https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql/ –

+0

@DanGuzman感謝您的回覆。我試過了,但沒有成功.request。查詢('insert -----; SELECT SCOPE_IDENTITY()),函數(err,data)。但數據未定義。 –

+0

@YoshihideNishimoto爲所涉及的表格填寫ddl - 至少是主鍵的一部分。推測你的桌子有一個標識欄 - 你有不同類型的合成鍵嗎? – SMor

回答

1

使用OUTPUT子句。下面是語法的例子...

IF OBJECT_ID('RandomTest.dbo.FeatureID_Capture', 'U') IS NOT NULL 
DROP TABLE dbo.FeatureID_Capture; 
GO  
CREATE TABLE dbo.FeatureID_Capture (
    Id NVARCHAR(50) 
    ); 
GO 

IF OBJECT_ID('RandomTest.dbo.Feature', 'U') IS NOT NULL 
DROP TABLE dbo.Feature; 
GO 
CREATE TABLE dbo.Feature ( 
    id NVARCHAR(40) NOT NULL 
     CONSTRAINT DF_Feature_id 
     DEFAULT (CONVERT(NVARCHAR(40), NEWID(), (0))), 
    createdAt DATETIMEOFFSET NOT NULL 
     CONSTRAINT DF_Feature_createdAt 
     DEFAULT (CONVERT(DATETIMEOFFSET, SYSUTCDATETIME(), (0))), 
    updatedAt DATETIMEOFFSET NULL, 
    version TIMESTAMP NOT NULL, 
    deleted BIT NULL 
     DEFAULT ((0)), 
    title NVARCHAR (10) NULL, 
    text NVARCHAR (10) NULL, 
    period_from DATETIMEOFFSET NULL, 
    period_to DATETIMEOFFSET NULL, 
    priority FLOAT NULL, 
    PRIMARY KEY NONCLUSTERED (id ASC) 
    WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) 
    ); 
GO 
--======================================================= 

INSERT dbo.Feature (title, text) 
    OUTPUT Inserted.id INTO dbo.FeatureID_Capture(Id) 
VALUES ('t 1', 'txt 1'), ('t 2', 'txt 22'), ('t 3', 'txt 333'); 

------------------------------------- 

SELECT *FROM dbo.FeatureID_Capture fic; 

輸出...

Id 
-------------------------------------------------- 
4E9EB3CD-AD44-4837-9B87-BBB85308FFBF 
B93983B6-C15A-4534-8AC4-EB9404964C09 
FAFA678A-8416-490C-A871-3963EAB67B9F 
+0

謝謝。這似乎需要一個IDENTITY列。但我們的表沒有那個。我不知道這是否是原因,但會出現以下錯誤。「OUTPUT INTO子句的目標表不能有任何啓用觸發器「 –

+0

它不...我更新了我的示例...我刪除了IDENTITY(1,1)屬性並將手動編碼的ID值添加到插入。 –

+0

謝謝。嗯...在我的情況下,ID插入時插入...所以我不能通過ID來查詢... –