0

次のように定義されたテーブルがあります。

CREATE TABLE [dbo].[procInfo](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [startTime] [datetime] NOT NULL,
    [endTime] [datetime] NULL,
    [procName] [varchar](50) NOT NULL,
 CONSTRAINT [PK_procInfo] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

プロセスを開始すると、C# コードから LinQtoSQL ストアド プロシージャを使用してプロセスのレコードを作成します。プロセスが終了したら、同じレコードをendtime. idは、他のテーブルによって参照されているため、同じままにする必要があります。私はSQLクエリを認識しています:

SET IDENTITY_INSERT [dbo].[procInfo] ON
SET IDENTITY_INSERT [dbo].[procInfo] OFF

プロセスが終了した場合、IDを保存する方法があります。ここで、ストアド プロシージャを記述して、このレコードをendTime. いろいろ試しているのですが、どれもうまくいきません。
これを行う方法について何か提案はありますか?

4

3 に答える 3

1

何かが足りないのかもしれませんが、単純に UPDATE クエリを使用することはできませんか?

UPDATE procInfo
SET endTime = <end time>
WHERE id = <process id>

それは非常に簡単なはずです。

于 2012-07-29T20:45:09.350 に答える
0

ああ、これを行う簡単な方法を見つけました。
ストアド プロシージャを次のように記述できます。

CREATE PROCEDURE dbo.insertProcEndTime
(
@id int,
@endtime datetime
)
AS
/* SET NOCOUNT ON */
UPDATE procInfo
SET endTime = @endtime
WHERE id = @id

RETURN

...そしてそれはうまくいきました。IDENTITY_INSERTフラグを変更する必要はありません。
シンプルにしておけバカ!!

于 2012-07-29T20:44:50.340 に答える
0

レコードが挿入されると、クエリSELECT SCOPE_IDENTITY()を使用して IDENTITY を取得できます。

このIDENTITYの助けを借りて、終了時間を更新できます

SELECT SCOPE_IDENTITY()値を生成したテーブルに関係なく、接続上および同じスコープ内のステートメントによって生成された最後の IDENTITY 値を返します。SCOPE_IDENTITY() は、@@IDENTITY と同様に、現在のセッションで作成された最後の ID 値を返しますが、現在のスコープにも制限されます。つまり、トリガーまたはユーザー定義関数によって作成された ID ではなく、明示的に作成された最後の ID 値が返されます。

于 2012-07-29T20:46:37.137 に答える