Sql 是否从SELECT查询更新或设置?

Sql 是否从SELECT查询更新或设置?,sql,sql-server,database,Sql,Sql Server,Database,我有一个信息数据库,只能使用一次。获取要导出到.CSV文件中以供使用的信息。我将使用以下查询,我们还使用了列USED,在数据导出后,该列应设置为YES(因此它不会被重复使用) 然后我想我会使用这个查询来更新列“USED”,这样如果再次运行相同的查询,只会导出新信息: UPDATE TOP(40000) QUETABLE SET USED = 'YES' WHERE USED = 'NULL' AND DEAD != 'YES'; 然而,尽管许多数据是相同的,但由于某些原因,并非所有4000

我有一个信息数据库,只能使用一次。获取要导出到
.CSV
文件中以供使用的信息。我将使用以下查询,我们还使用了列
USED
,在数据导出后,该列应设置为
YES
(因此它不会被重复使用)

然后我想我会使用这个查询来更新列“USED”,这样如果再次运行相同的查询,只会导出新信息:

UPDATE TOP(40000) QUETABLE 
SET USED = 'YES' 
WHERE USED = 'NULL' AND DEAD != 'YES';
然而,尽管许多数据是相同的,但由于某些原因,并非所有400000列都匹配,这意味着未使用的数据将被标记为已使用(反之亦然),已使用的列在使用之前被设置为NULL(不是NULL,而是写为“NULL”)

我如何运行top查询,但同时也将USED设置为“YES”,这样信息就完全相同了?因此,在断开的SQL中,它将如下所示:

SELECT TOP(40000) 
       ms.website AS Website, 
       ms.company   AS COMPANY, 
       ms.address   AS [ADDRESS], 
       ms.city      AS CITY, 
       ms.state     AS [STATE], 
       ms.zip       AS ZIP, 
       ms.phone     AS PHONE
FROM   [QUETABLE] as ms
WHERE  DEAD != 'YES' AND USED != 'YES' THEN SET USED = 'YES';
但当然,这是行不通的,我不知道如何做到这一点


谢谢你

你使用的是
TOP
,没有
ORDER BY
。这会返回任意一组行。没有理由认为在同一查询的两次不同运行中返回的行会返回相同的行,更不用说
更新
选择

我建议您使用,并按照相反的顺序进行工作:

DECLARE @t TABLE ( . . . );  -- fill in the columns

UPDATE TOP(40000) QUETABLE
    SET USED = 'YES' 
    OUTPUT inserted.* INTO @t;
    WHERE USED = 'NULL' AND DEAD <> 'YES'
DECLARE@t TABLE(…);--填写列
更新TOP(40000)查询表
SET USED='YES'
在@t中插入输出。*;
WHERE USED='NULL'和DEAD'YES'
现在,您可以“导出”刚刚设置为
DONE
的内容

DECLARE @t TABLE ( . . . );  -- fill in the columns

UPDATE TOP(40000) QUETABLE
    SET USED = 'YES' 
    OUTPUT inserted.* INTO @t;
    WHERE USED = 'NULL' AND DEAD <> 'YES'