小编Kut*_*ike的帖子

MERGE 目标表的一个子集

我正在尝试使用MERGE语句从表中插入或删除行,但我只想对这些行的一个子集进行操作。的文档MERGE有一个措辞非常强烈的警告:

仅指定目标表中用于匹配目的的列很重要。也就是说,指定目标表中与源表的相应列进行比较的列。不要试图通过在 ON 子句中过滤掉目标表中的行来提高查询性能,例如通过指定 AND NOT target_table.column_x = value。这样做可能会返回意外和不正确的结果。

但这正是我必须做的事情才能完成我的MERGE工作。

我拥有的数据是一个标准的项目到类别的多对多连接表(例如,哪些项目包含在哪些类别中),如下所示:

CategoryId   ItemId
==========   ======
1            1
1            2
1            3
2            1
2            3
3            5
3            6
4            5
Run Code Online (Sandbox Code Playgroud)

我需要做的是用新的项目列表有效地替换特定类别中的所有行。我最初的尝试是这样的:

MERGE INTO CategoryItem AS TARGET
USING (
  SELECT ItemId FROM SomeExternalDataSource WHERE CategoryId = 2
) AS SOURCE
ON SOURCE.ItemId = TARGET.ItemId AND TARGET.CategoryId = 2
WHEN NOT MATCHED BY TARGET THEN
    INSERT ( CategoryId, ItemId )
    VALUES ( 2, ItemId ) …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql merge

74
推荐指数
1
解决办法
8万
查看次数

NUMERIC 和 DECIMAL 之间有什么区别吗?

我知道 SQL Server 中的 NUMERIC 和 DECIMAL 数据类型的工作方式相同:创建它们的语法是相同的,可以存储在它们中的值的范围是相同的,等等。

但是,MSDN 文档将两者之间的关系描述为:

数字在功能上等同于十进制。

通常,当我看到限定词“功能上等效”时,这意味着这两个东西并不完全相同,而是从外部无法区分的两种不同类型。

这个含义是真的吗?NUMERIC 和 DECIMAL 之间是否存在差异,恰好在外部观察者看来表现相同?或者它们实际上是等效的,例如 NUMERIC 只是 DECIMAL 的旧同义词吗?

sql-server

48
推荐指数
2
解决办法
6万
查看次数

Transact-SQL 中的对称差分运算?

我一直都知道UNIONSQL 中的运算符,但直到最近才发现还有其他的集合运算符,INTERSECTEXCEPT. 我一直无法找到执行第四大集合运算符的运算符,即对称差异(例如 . 的相反INTERSECT

看起来我可以通过使用类似的东西来获得所需的输出

SELECT Field FROM A UNION SELECT Field FROM B 
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
Run Code Online (Sandbox Code Playgroud)

(假设我得到了正确的优先级),或者通过做一个反完全连接:

SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
Run Code Online (Sandbox Code Playgroud)

但是这两个看起来都像是相当密集的查询,尤其是与其他三个基本的集合操作相比。SQL中是否存在对称差异操作而我在文档中找不到它?或者是否有一种“规范”的方式在 T-SQL 中实现它?

sql-server t-sql

12
推荐指数
1
解决办法
3858
查看次数

SQL Profiler 中显示的二进制数据列是否包含有用的信息?

SQL Profiler 捕获的许多事件都包含一个二进制数据列。这些事件类的文档只是重复了这一事实,即该列包含“依赖于跟踪中捕获的事件类的二进制值”。

我对RPC:StartingRPC:Completed事件特别感兴趣;我注意到,无论何时执行相同的查询,每个事件的二进制数据都是相同的,尽管开始和完成事件具有不同的二进制数据。但是其他事件也会在此处显示我对解码感兴趣的信息。当然,这假设数据甚至相关或有意义。

这些字段的内容是否记录在任何地方,对开发人员/管理员是否有意义?

sql-server profiler

6
推荐指数
1
解决办法
3867
查看次数

标签 统计

sql-server ×4

t-sql ×2

merge ×1

profiler ×1