在具有特定要求的 SQL 服务器中更新或插入
UPDATE or INSERT in SQL Server with specific requirements
我需要将记录插入 table,如下所示:
CREATE TABLE [dbo].[ExamFees]
(
[ExamSeriesID] [int] NOT NULL,
[Region] [varchar](50) NOT NULL,
[Fee] [money] NOT NULL,
[DatetimeEntered] [datetime] NULL
)
但是,如果记录已经存在,那么我只想将 DatetimeEntered 设置为 GETDATE()。
我想我需要使用合并,但我不确定如何执行此操作,并且被告知如果我不知道自己在做什么,我可能会丢失数据。
一些示例数据是:
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'Low', 10.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'Lower mid', 20.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'Upper mid', 30.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'High', 40.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'Low', 5.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'Lower mid', 10.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'Upper mid', 15.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'High', 20.00, GETDATE())
值得一提的是,这也将从 C# 程序调用。
SQL 大量生成并添加到 StringBuilder,如下所示:
string Region = "Low";
string ExamFeesTableName = "ExamFees";
sb.AppendLine("INSERT INTO " + ExamFeesTableName + "([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(" + ExamSeriesID + ", '" + Region + "', " + Fee.ToString("0.00") + ", GETDATE())");
有人能帮忙吗?
我建议选择类似于以下方法之一的策略:
方法一
IF EXISTS (SELECT * FROM ExamFees WHERE ExamSeriesID='553' and Region = 'Low')
UPDATE ExamFees SET DatetimeEntered = GETDATE() WHERE ExamSeriesID='553' and Region = 'Low'
ELSE
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES('553', 'Low', 10.00, GETDATE())
方法二
UPDATE ExamFees SET DatetimeEntered = GETDATE() WHERE ExamSeriesID='553' and Region = 'Low'
IF @@ROWCOUNT=0
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES('553', 'Low', 10.00, GETDATE())
这些示例基于您的第一个 INSERT
语句,每个 INSERT 语句都需要重复。
我需要将记录插入 table,如下所示:
CREATE TABLE [dbo].[ExamFees]
(
[ExamSeriesID] [int] NOT NULL,
[Region] [varchar](50) NOT NULL,
[Fee] [money] NOT NULL,
[DatetimeEntered] [datetime] NULL
)
但是,如果记录已经存在,那么我只想将 DatetimeEntered 设置为 GETDATE()。
我想我需要使用合并,但我不确定如何执行此操作,并且被告知如果我不知道自己在做什么,我可能会丢失数据。
一些示例数据是:
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'Low', 10.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'Lower mid', 20.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'Upper mid', 30.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(553, 'High', 40.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'Low', 5.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'Lower mid', 10.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'Upper mid', 15.00, GETDATE())
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(401, 'High', 20.00, GETDATE())
值得一提的是,这也将从 C# 程序调用。
SQL 大量生成并添加到 StringBuilder,如下所示:
string Region = "Low";
string ExamFeesTableName = "ExamFees";
sb.AppendLine("INSERT INTO " + ExamFeesTableName + "([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES(" + ExamSeriesID + ", '" + Region + "', " + Fee.ToString("0.00") + ", GETDATE())");
有人能帮忙吗?
我建议选择类似于以下方法之一的策略:
方法一
IF EXISTS (SELECT * FROM ExamFees WHERE ExamSeriesID='553' and Region = 'Low')
UPDATE ExamFees SET DatetimeEntered = GETDATE() WHERE ExamSeriesID='553' and Region = 'Low'
ELSE
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES('553', 'Low', 10.00, GETDATE())
方法二
UPDATE ExamFees SET DatetimeEntered = GETDATE() WHERE ExamSeriesID='553' and Region = 'Low'
IF @@ROWCOUNT=0
INSERT INTO ExamFees([ExamSeriesID], [Region], [Fee], [DatetimeEntered]) VALUES('553', 'Low', 10.00, GETDATE())
这些示例基于您的第一个 INSERT
语句,每个 INSERT 语句都需要重复。