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 一样,将返回在当前会话中创建的最后一个身份值,但它也会将其限制在您当前的范围内。换句话说,它将返回您显式创建的最后一个身份值,而不是由触发器或用户定义的函数创建的任何身份。

于 2012-07-29T20:46:37.137 回答