【问题标题】:SQL Server, How to remove updates elements from User-Defined Table Type?SQL Server,如何从用户定义的表类型中删除更新元素?
【发布时间】:2012-03-20 00:30:55
【问题描述】:

我有一个用户定义的表类型,比如说@TT dbo.IntType readonly, IntType 是一批int,作为主键

CREATE TYPE [dbo].[IntType] AS TABLE(
    [T] [int] NOT NULL,
    PRIMARY KEY CLUSTERED 

我喜欢根据IntType 中的所有键(int) 执行UPDATE,并且数据库中不存在键(int) 的INSERT 新行(更新插入)

我想知道是否有一种简单的方法可以删除“UPDATED”键(int)?然后我可以插入其余的。 (或者如果你有 SQL Server 2010 的超级单行 upsert !!!)

【问题讨论】:

    标签: sql sql-server upsert


    【解决方案1】:

    使用MERGE 语句。

    http://technet.microsoft.com/en-us/library/bb510625.aspx

    让我看看我能不能把东西放在一起。

    编辑:示例

    MERGE INTO [TargetTable] AS T
    USING (SELECT l.T AS 'id' FROM @list l ) AS S
    ON (T.[id] = S.[id])
    WHEN MATCHED THEN
        UPDATE SET
            T.updated = 1
    WHEN NOT MATCHED THEN
        INSERT VALUES ([insert value into each column of target table]);
    

    编辑 2:参数 @list 是您使用 id 填充的传入列表

    【讨论】:

    • 天哪,这很简单,我迫不及待想尝试一下
    • 确实不错,但这仅适用于 2008 年及更高版本。由于您使用的是 2010,我认为您会没事的。
    • 它就像一个魅力,快速而可靠。在我本地的SQL Server 2008 R2SQL Azure 上工作过。对于 SQL 2010 的事情,我的错,M$ 的产品太多,搞砸了我的想法。
    • 我也不太确定那是什么。我认为这是 2008 R2 之后的新版本,但我认为我并不总是跟上最新版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多