時間後:これは私のテーブルの定義は
insert(row: object): any {
const sql = `
IF NOT EXISTS (
SELECT 1
FROM dbo.lendbook d WITH (HOLDLOCK)
WHERE d.rate = @rate
AND d.amount = @amount
AND d.period = @period
AND d.timestamp = @timestamp
AND d.type = @type
AND d.frr = @frr
)
BEGIN
INSERT dbo.lendbook
(rate, amount, period, timestamp, type, frr)
VALUES
(@rate, @amount, @period, @timestamp, @type, @frr)
END
`;
const ps = new mssql.PreparedStatement(this.db);
ps.input('rate', mssql.Float);
ps.input('amount', mssql.Float);
ps.input('period', mssql.Int);
ps.input('timestamp', mssql.DateTime);
ps.input('type', mssql.NVarChar);
ps.input('frr', mssql.NVarChar);
ps.prepare(sql, (err: any) => {
if (err) {
LendbookService.LOGGER.error('MSSQL prepare error', err);
}
else {
ps.execute(row, (err: any) => {
if (err) {
LendbookService.LOGGER.error('MSSQL execute error', err);
}
ps.unprepare((err: any) => {
if (err) {
LendbookService.LOGGER.error('MSSQL unprepare error', err);
}
});
});
}
});
return ps;
}
である:以下
は、データを挿入するノード-MSSQLを使用して私のコードで、コア事はクエリです研究とテストをすることで、私はそれを理解しました。残りのAPIからの挿入データ以下のクエリは、データベースに私のテーブルにプッシュする前に(すべての列に同じ値を持つ)、絶対重複をフィルタリングします。同じ状況で誰かを助けてくれることを願っています。
const sql = `
INSERT dbo.lendbook
(rate, amount, period, timestamp, type, frr)
VALUES
(@rate, @amount, @period, @timestamp, @type, @frr)
;WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY rate, amount, period, timestamp, type, frr
ORDER BY (SELECT 0)) RN
FROM dbo.lendbook)
DELETE FROM cte
WHERE RN > 1;
`;