Sql server 选择不在表中的列的最佳方法

Sql server 选择不在表中的列的最佳方法,sql-server,stored-procedures,sql-server-2012,Sql Server,Stored Procedures,Sql Server 2012,我有一个带有唯一列“X”的表 我希望使用表值对X向存储过程传递一个列表,并希望返回表中不存在的所有X的列表 在SQL Server中执行此操作最有效的方法是什么 编辑: 我想到了这个。不确定它的效率有多高: CREATE TYPE StringList_TBLType AS TABLE (s NVARCHAR(255) NOT NULL PRIMARY KEY) CREATE PROCEDURE [dbo].ReturnProductsNotExisting ( @CatalogIdL

我有一个带有唯一列“X”的表

我希望使用表值对X向存储过程传递一个列表,并希望返回表中不存在的所有X的列表

在SQL Server中执行此操作最有效的方法是什么

编辑:


我想到了这个。不确定它的效率有多高:

CREATE TYPE StringList_TBLType AS TABLE (s NVARCHAR(255) NOT NULL PRIMARY KEY)

CREATE PROCEDURE [dbo].ReturnProductsNotExisting
(
    @CatalogIdList StringList_TBLType READONLY  
)
AS
BEGIN
    SELECT s FROM @CatalogIdList
    WHERE s NOT IN (SELECT CatalogId from Products)
END

我应该补充一点,我要传递的X的列表是每次执行存储过程10000个项目什么是“表值对”?你是说单列的“表值参数”吗?对不起,我指的是单列的表值参数我想到了这个。不确定这是否是最有效的方法。如果
产品
中的
CatalogId
不可为空,则应与其他任何方法一样有效(并给出与
不存在
相同的计划),如果传递大量行,则可以添加
选项(重新编译)
因此它考虑了TVP中实际包含的行数。