Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在下面的示例中,这在MS SQL中是如何工作的_Sql Server - Fatal编程技术网

Sql server 在下面的示例中,这在MS SQL中是如何工作的

Sql server 在下面的示例中,这在MS SQL中是如何工作的,sql-server,Sql Server,我对MS SQL非常陌生,但现在我不得不越来越多地使用它。我遇到了一些东西,以前有人写过,但没有写任何文档。。我真幸运。。。我似乎无法对这句话保持清醒: BEGIN TRANSACTION loadMissingAllocations INSERT INTO @missingAllocs SELECT * FROM @absAllocs EXCEPT SELECT * FROM @ttaAllocs SET @rowCount = @@ROWCOUNT S

我对MS SQL非常陌生,但现在我不得不越来越多地使用它。我遇到了一些东西,以前有人写过,但没有写任何文档。。我真幸运。。。我似乎无法对这句话保持清醒:

BEGIN TRANSACTION loadMissingAllocations
    INSERT INTO @missingAllocs
    SELECT * FROM @absAllocs
    EXCEPT
    SELECT * FROM @ttaAllocs
    SET @rowCount = @@ROWCOUNT
SET @eventDetails = 'End loadMissingAllocations: ' + CAST(@rowCount as VARCHAR(10)) + ' rows affected';
COMMIT TRANSACTION loadMissingAllocations
所以,看起来我们正在从absALLOCS中选择所有内容,并将其插入missingALLOCS中,但对我来说,除了似乎完全不合适。。。我理解的是:

从x中选择除y之外的所有内容,并将其放入z中

这不可能,对吧


感谢您的指导!:

链接中EXCEPT子句的良好视觉表示


EXCEPT基本上从两个表中删除公共元素,而不从第二个表中获取任何元素

你的直觉是对的

从x中选择除y之外的所有内容,并将其放入z中

将其转化为表格意味着:

SELECT EVERYTHING FROM @absAllocs
EXCEPT 
WHAT ALREADY EXISTS IN @ttaAllocs
AND
STORE THAT RESULT IN @missingAllocs


@absAllocs中存在但@ttaAllocs中不存在的所有内容都保存到@missingAllocs中。

除了关系减法。第二组的结果将从第一组的结果中删除。其余部分插入@missingAllocs.SELECT。。除了选择。。。本身是有效的声明;然后将其结果用作插入的源。手册您也可以替换,除非通常使用“选择不同…”。。。哪里没有选择。。或者从表1中选择DISTINCT table1.*。左连接table2,其中table2.colum为NULL,并且…@RaymondNijland:只有当存在可用于连接的键列时,才是如此。EXCEPT将以正确的方式处理NULL值,即,它将NULL与NULL相匹配,以确定行是否相同,因此无论是否存在联接表的自然方式,都可以使用它,实际上@jeroenmoster使用LEFT JOIN来替换有点棘手,因为EXPECT句柄NULL不同,我忘记了这一点。好吧,我的想法其实没什么不同,是吗?