Sql server 2008 如何在sql中插入后更新字段
我有一个带有一些字段的表格Purchaseforms。此表有两个字段PurchaseId(标识)和PurchaseNumber(nvarchar) 在Purchaseform表中插入一行后,它返回@@IDENTITY。我想在插入后立即更新PurchaseNumber字段 例如Sql server 2008 如何在sql中插入后更新字段,sql-server-2008,Sql Server 2008,我有一个带有一些字段的表格Purchaseforms。此表有两个字段PurchaseId(标识)和PurchaseNumber(nvarchar) 在Purchaseform表中插入一行后,它返回@@IDENTITY。我想在插入后立即更新PurchaseNumber字段 例如 如果PurchaseId为1000,PurchaseNumber应更新为P1000。如何操作?插入触发器可用于根据一个字段更新另一个字段 请注意,以下代码将始终覆盖PurchaseNumber,即使在插入行时提供了值。可以
如果PurchaseId为1000,PurchaseNumber应更新为P1000。如何操作?插入触发器可用于根据一个字段更新另一个字段 请注意,以下代码将始终覆盖PurchaseNumber,即使在插入行时提供了值。可以将WHERE子句添加到已具有PurchaseNumber值的UPDATE skip行中
除了触发器:插入和删除是表,因此它们可以表示集合操作的结果。在假设触发器总是只包含一行的情况下设计触发器通常是一个糟糕的计划。如果您绝对确定不会有超过一行,那么请添加对行数的检查,并使用RaIsError明确通知稍后出现的人,他们试图执行不可接受的语句。如果选择Count*from inserted>1,则会出现错误“FooTable\u Insert:最多只能处理一行”。25、42和log可以使用更好的计算列
CREATE TABLE Purchaseforms
(
PurchaseId int IDENTITY,
PurchaseNumber AS 'P' + CAST(PurchaseId AS nvarchar(10)),
...
other columns
)
每当发生插入时,可以使用触发器更新字段。在触发器中,您将使用inserted.PurchaseId。在其他代码中,我建议使用Scope_Identity或OUTPUT子句@@身份有一些可能导致惊喜的问题。嗨,谢谢你的回答。你能用一个例子给我解释一下吗。
CREATE TABLE Purchaseforms
(
PurchaseId int IDENTITY,
PurchaseNumber AS 'P' + CAST(PurchaseId AS nvarchar(10)),
...
other columns
)