![](/img/trans.png)
[英]Is it possible to add a column to a temp table (using alter) and then immediately update that column?
[英]Update multiple column and row using temp table
我正在尝试根据条件更新多列值,但它仅更新单列。 我不知道为什么它不更新所有列。
这是我的SP。
CREATE PROCEDURE [dbo].[MIC_UpdateIdeaInline]
(
@UpdatedBy int,
@UpdatedOn Datetime,
@UpdateRecords [UpdateIdeaInline] READONLY
)
as
BEGIN
UPDATE MI
SET MI.IsPortalShare= CASE WHEN ColoumnName = 'IsPortalShare' THEN CAST(ur.ColValue as BIT) ELSE IsPortalShare END
,MI.Validity= CASE WHEN ColoumnName = 'Validity' THEN CAST(ur.ColValue as BIT) ELSE Validity END
,MI.DeadLine= CASE WHEN ColoumnName = 'DeadLine' THEN CAST(ur.ColValue as datetime) ELSE DeadLine END
,MI.UpdatedBy=@UpdatedBy, MI.UpdatedOn=@UpdatedOn
from [MIC_Idea] MI
Join @UpdateRecords ur ON MI.Id=ur.IdeaId
SELECT 1
END
这些是我在调用SP时的参数。
declare @p3 dbo.UpdateIdeaInline
insert into @p3 values(N'15',N'Validity',N'1')
insert into @p3 values(N'15',N'DeadLine',N'15-Jun-2017')
insert into @p3 values(N'14',N'Validity',N'0')
insert into @p3 values(N'14',N'DeadLine',N'15-Jun-2017')
exec MIC_UpdateIdeaInline @UpdatedBy=1,@UpdatedOn='2017-06-06 21:45:19.863',@UpdateRecords=@p3
go
UpdateIdeaInline是表类型。 它的第一列包含
ColumnValue
如您所见,我想为相同的ID 14和15更新Column(有效性和DeadLine),但这只是更新有效性列。
那是因为您的更新是在单个原子事务中进行的。 Update语句两次更新该表,因为ID在UpdateRecords表中重复。 因此,在第二次更新中,它无法读取由第一次更新所更新的值。
示例:您具有值10和15。
现在,您发出一个与UpdateRecord表连接的UPDATE,该表具有两个相同的ID,但每个ID对应于不同的列。
例如,UpdateRecord具有“ Col1”,30“ Col2”,40
第一次更新后:
10-> 30(待定)
15-> 15(待定)
第二次更新后:
10-> 10(待定)
15-> 40(待定)
提交交易后:
10 - > 10
15 - > 40
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.