繁体   English   中英

使用临时表更新多个列和行

[英]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是表类型。 它的第一列包含

  • ID
  • 的ColumnName
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM