T-SQL - 仅在表中不存在时才在表中插入行

Hos*_*146 5 t-sql sql-server

我有如下所示的T-SQL.@Results是一个表变量,'CTE'是一个公用表表达式.如果我要插入的SubId尚未插入表中,我只想在@Results表中插入行.下面显示的代码不起作用,我不知道为什么.有谁能看到这个问题?

Insert Into @Results (
    Cell, 
    CellSettings, 
    RecipeInstanceId, 
    BiasStartTime, 
    SubId 
    RuleInstanceId)
Select 
    Cell, 
    CellSettings, 
    RecipeInstanceId, 
    BiasStartTime, 
    SubId, 
    RuleInstanceId
From CTE
Where CTE.SubId NOT IN (Select SubId From @Results)
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 6

您需要先检查是否存在:

IF NOT EXISTS(SELECT * FROM @Results WHERE SubId = .......)
   INSERT INTO @Results (Cell, CellSettings, RecipeInstanceId, 
                          BiasStartTime, SubId, RuleInstanceId)
     SELECT 
         Cell, CellSettings, RecipeInstanceId, 
         BiasStartTime, SubId, RuleInstanceId
     FROM CTE
Run Code Online (Sandbox Code Playgroud)

也许您可以将此要求(仅将那些尚不存在的行返回)放入CTE中,这样您就不必再次从CTE过滤输出...