我有一个表定义为:
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]
当我启动一个Process时,我使用我的c#代码中的LinQtoSQL存储过程为它创建一条记录。
现在,当流程结束时,我想用endtime
更新相同的记录。 id
应保持与其他表引用的相同。
我知道SQL查询:
SET IDENTITY_INSERT [dbo].[procInfo] ON
SET IDENTITY_INSERT [dbo].[procInfo] OFF
如果已经完成的进程,我有办法存储id。现在,我想编写一个存储过程来使用endTime
更新此记录。我一直在尝试各种各样的东西,但没有一个在起作用
有关如何做到这一点的任何建议吗?
答案 0 :(得分:1)
也许我错过了什么,但你不能简单地使用UPDATE查询吗?
UPDATE procInfo
SET endTime = <end time>
WHERE id = <process id>
应该很简单。
答案 1 :(得分:0)
CREATE PROCEDURE dbo.insertProcEndTime
(
@id int,
@endtime datetime
)
AS
/* SET NOCOUNT ON */
UPDATE procInfo
SET endTime = @endtime
WHERE id = @id
RETURN
......它奏效了。无需修改IDENTITY_INSERT
标志
保持简单愚蠢!!
答案 2 :(得分:0)
插入记录后,您可以使用查询SELECT SCOPE_IDENTITY()
获取IDENTITY借助此IDENTITY,您可以更新结束时间
SELECT SCOPE_IDENTITY()它返回最后一个IDENTITY值 在连接和同一范围内的声明中生成, 无论产生价值的表如何。 SCOPE_IDENTITY() 像@@ IDENTITY一样,将返回在中创建的最后一个标识值 当前会话,但它也会将其限制为您当前的范围 好。换句话说,它将返回您的最后一个标识值 显式创建,而不是由a创建的任何标识 触发器或用户定义的函数。