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 R2
和SQL Azure
上工作过。对于 SQL 2010 的事情,我的错,M$ 的产品太多,搞砸了我的想法。
我也不太确定那是什么。我认为这是 2008 R2 之后的新版本,但我认为我并不总是跟上最新版本。以上是关于SQL Server,如何从用户定义的表类型中删除更新元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何在SQL Server中使用用户定义的表类型插入数据时避免重复记录
在 SQL Server Management Studio 中使用执行过程 - 如何格式化用户定义的表类型的值?