SQL Serverと共にC#を使用しています(異なるバージョンを試したのでバージョンは関係ありません)。クエリを次のように記述します。C#で更新:タイムアウトに@@ RowCount = 0に挿入
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]
)
基本的なのですか?
なぜ最初のレコードが利用可能かどうかと、その挿入に基づいてあるデータベースを照会し、それに応じて更新されていません。 –
というのは、2つのクエリを実行する必要があり、1つのクエリを実行するよりも時間がかかるためです。さらに、このクエリには構文エラーがないため、通常と同じ速度で実行する必要があります。ではない? –