我使用的是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秒的时间内执行。
我不确定如何调试它。我尝试在其他表上运行类似的查询,它们似乎工作得很好,但同样,不确定为什么在这个特定的表上失败。
表的结构是基本的
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]
)你知道这里可能出了什么问题吗?
发布于 2017-02-15 14:35:52
使用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); https://stackoverflow.com/questions/42242106
复制相似问题