首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在@@RowCount=0上插入以进行更新:在C#中超时

在@@RowCount=0上插入以进行更新:在C#中超时
EN

Stack Overflow用户
提问于 2017-02-15 14:27:01
回答 1查看 160关注 0票数 1

我使用的是C#和SQL Server (尝试过不同的版本,所以版本并不重要)。我把查询写成

代码语言:javascript
运行
复制
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秒的时间内执行。

我不确定如何调试它。我尝试在其他表上运行类似的查询,它们似乎工作得很好,但同样,不确定为什么在这个特定的表上失败。

表的结构是基本的

代码语言:javascript
运行
复制
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]
)

你知道这里可能出了什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-15 14:35:52

使用MERGE语句

代码语言:javascript
运行
复制
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); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42242106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档