SQL Server,如何从用户定义的表类型中删除更新元素?

Posted

技术标签:

【中文标题】SQL Server,如何从用户定义的表类型中删除更新元素?【英文标题】:SQL Server, How to remove updates elements from User-Defined Table Type? 【发布时间】: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 !!!)

【问题讨论】:

【参考方案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 之后的新版本,但我认为我并不总是跟上最新版本。

以上是关于SQL Server,如何从用户定义的表类型中删除更新元素?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:关于用户定义的表类型的 ltrim

如何在SQL Server中使用用户定义的表类型插入数据时避免重复记录

在 SQL Server Management Studio 中使用执行过程 - 如何格式化用户定义的表类型的值?

如何在 SQL Server 中获取用户定义的表值函数的结果形状? [复制]

在 SQL Server 数据库之间传递用户定义的表类型

SQL Server中用户定义的表类型的性能