Data1
+++++++++++++++++
|Name | Grade|
++++++++++++++++
|Tom | A |
|NULL | B |
|Bill | NULL|
+++++++++++++++++
让我们说,我有一个表“Data1”如上所述。 我编写了一个动态查询,它将从Data1中为Name和Grade Columns检索NOT NULL值。
DECLARE @Query nvarchar(255)
SET @Query = SELECT * from Data1 WHERE Name IS NOT NULL AND Grade IS NOT NULL
执行@query
EXECUTE sp_executesql @Query
我应该得到结果:
+++++++++++++++++
|Name | Grade|
++++++++++++++++
|Tom | A |
+++++++++++++++++
是否有可能以这样的方式编写@query,即使用执行@Query的结果更新Data1,即:table Data1仅保存此值
Updated Data1 table
+++++++++++++++++
|Name | Grade|
++++++++++++++++
|Tom | A |
+++++++++++++++++
在其中继续并删除其余部分,是否可能?
我知道一个选项是写入另一个表,然后根据该表的值更新Data1,但我只是想知道是否有更有效的更新表的方法:Data1 没有创建更多的表?
感谢。
答案 0 :(得分:0)
声明,你在这里是:
DELETE FROM Data1
WHERE [Name] IS NULL
OR Grade IS NULL;
此查询没有理由是动态的。不过,我有这种感觉,这可能是一个xy问题。
答案 1 :(得分:0)
您也可以使用NOT EXISTS
代替:
DELETE d
FROM Data1 d
WHERE NOT EXISTS (SELECT 1
FROM Data1 d1
WHERE d1.NAME = d.NAME AND d1.GRADE = d.GRADE AND
d1.NAME IS NOT NULL AND d1.GRADE IS NOT NULL
)
GO
SELECT *
FROM Data1 d;