我正在尝试在表中查找重复记录。
我的目标是先检查结果,然后再删除双打。
所以想法是使用CTE查找所有双打,并保留原始记录
WITH CTE AS(
SELECT ChassisID, FileName, OpdrachtID,
RN = ROW_NUMBER() OVER (PARTITION BY ChassisID, FileName, OpdrachtID ORDER BY ChassisID)
FROM dbo.tblChassisVMac
)
SELECT FROM CTE
WHERE RN > 1
,在检查所有条件是否正确之后,我想用SELECT
代替DELETE
但是我一直收到此错误:
关键字“ FROM”附近的语法不正确
我可能缺少一些琐碎的东西,但我看不到
SQL Server 2014(SP2)
答案 0 :(得分:3)
您的删除将如下所示:
DELETE
FROM CTE
WHERE RN > 1;
DELETE
语句通常不指定列,因为它的目标是要删除的整个记录。另一方面,SELECT
查询需要指定列。因此,以下选择将起作用:
SELECT *
FROM CTE
WHERE RN > 1;
答案 1 :(得分:2)
您需要使用expression
语句至少定义一个column
或SELECT
SELECT col1, . . .
FROM CTE
WHERE RN > 1
您可以将记录删除为:
DELETE C
FROM CTE C
WHERE RN > 1;
答案 2 :(得分:1)
在关键字中使用*之前,或在选择查询中使用列名
;WITH CTE AS(
SELECT ChassisID, FileName, OpdrachtID,
RN = ROW_NUMBER() OVER (PARTITION BY ChassisID, FileName, OpdrachtID ORDER BY ChassisID)
FROM dbo.tblChassisVMac
)
SELECT *
FROM CTE
WHERE RN > 1
答案 3 :(得分:0)
使用CTE时,它必须是批处理中的第一条语句。 尝试使用派生表,如下所示
IF @Block <> 'All'
BEGIN
SELECT * FROM (SELECT Columns FROM TableName) AS T
END
ELSE
BEGIN
SELECT * FROM (SELECT Columns FROM TableName) AS T1