我正在使用C#和SQL Server(尝试了不同的版本,因此版本并不重要)。我写了一个查询
UPDATE tblSalesVerbiage
SET SalesID = 1,
Message = '',
SpanishMessage = '',
TitleName = 'VerbiageOnline6',
isEditable = 0
WHERE TitleName = 'VerbiageOnline6' AND SalesID = 1;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO [tblSalesVerbiage]
(SalesID, Message, SpanishMessage, TitleName, isEditable)
VALUES (1, '', '', 'VerbiageOnline6', 0);
SELECT 1;
END
ELSE SELECT 0;
查询只是尝试更新一行,如果受影响的行为0则尝试插入它。我发现基于一些研究,这比SQL Server中的其他方法更快。但是,此查询给出了此特定表的问题,如果尚未插入行或未找到行进行更新,则在运行C#代码时执行需要30秒以上。但是当直接在SSMS中运行时,它可能在不到1秒的时间内以jiffy执行。
我不确定如何调试它。我尝试在其他表上运行类似的查询,它们似乎运行良好,但再次,不知道为什么它在这个特定的表上失败。
表结构是基本的
CREATE TABLE [dbo].[tblSalesVerbiage](
[VerbId] [int] IDENTITY(1,1) NOT NULL,
[SalesId] [bigint] NOT NULL,
[Message] [varchar](max) NULL,
[TitleName] [varchar](50) NOT NULL,
[SpanishMessage] [varchar](max) NULL,
[IsEditable] [bit] NULL,
CONSTRAINT [PK_tblSalesVerbiage] PRIMARY KEY CLUSTERED
(
[VerbId] ASC
) ON [PRIMARY]
)
知道这里可能出现什么问题吗?
答案 0 :(得分:0)
使用MERGE
声明
MERGE [tblSalesVerbiage] a
using (VALUES (1,'','','VerbiageOnline6',0)) tc (SalesID, Message, SpanishMessage, TitleName, isEditable)
ON a.TitleName = tc.TitleName
AND a.SalesID = tc.SalesID
WHEN matched THEN
UPDATE SET Message = tc.SalesID,
SpanishMessage = tc.SpanishMessage,
isEditable = tc.isEditable
WHEN NOT matched THEN
INSERT (SalesID,
Message,
SpanishMessage,
TitleName,
isEditable)
VALUES (SalesID,
Message,
SpanishMessage,
TitleName,
isEditable);