循环遍历表以将where条件输入到删除查询中

时间:2017-03-02 06:30:11

标签: sql sql-server-2012

我正在运行SQL Server 2012。

我有两张桌子:

表1 [dbo] .FilestoUpdate - 此文件记录以测试重复项:

[ID]     [A_number]
 1         A069467
 2         A078594
 3         A085473
etc          etc

表2包含我的所有数据: 我正在使用以下查询删除表2中的重复记录:

;WITH Vals AS (SELECT [A_number]
  ,[Date]
  ,[ZONE]
  ,[MGA_N]
  ,[MGA_E]
  ,[MI_SQL_Y]
  ,[MI_SQL_X]
  ,[RL]
  ,[SHEET_100K]
  ,[SHEET_250K]
  ,[Hole_ID]
  ,[Sample_Group]
  ,[Sample_No]
  ,[Mesh_Size]
  ,[Sample_Type]
  ,[DEPTH]
  ,[Au_ppb]
  ,[Au_limit]
  ,[Au_meth]
  ,[Ag_ppm]
  ,[Ag_limit]
  ,[Ag_meth]
  ,[As_ppm]
  ,[As_limit]
  ,[As_meth]
  ,[Cu_ppm]
  ,[Cu_limit]
  ,[Cu_meth]
  ,[Ni_ppm]
  ,[Ni_limit]
  ,[Ni_meth]
  ,[Co_ppm]
  ,[Co_limit]
  ,[Co_meth]
  ,[Pb_ppm]
  ,[Pb_limit]
  ,[Pb_meth]
  ,[Zn_ppm]
  ,[Zn_limit]
  ,[Zn_meth]
  ,[Lithology]
  ,[Comments]
  ,[CompositeID]
  ,[SourcefileName]
  ,[Coordinate_ID]
  ,[Priority]
  ,[myStyle]
  ,[MI_PRINX]
  ,therow = row_number() OVER(PARTITION BY [Coordinate_ID] ORDER BY [Coordinate_ID]  DESC)
  FROM [DRILLHOLES_Export].[dbo].[WAMEX_Soil_Live]
  WHERE [A_number] = 'A069467'
)

DELETE FROM VALS
WHERE  therow > 1;

我想循环遍历table1(FilestoUpate)并使用每个a_number运行查询,例如'A069467'然后'A078594'然后'A085473 ete等。

这可能吗?

此致

彼得

1 个答案:

答案 0 :(得分:0)

是的。 SQL对数据集进行操作,因此您必须使用要删除的行构建一组数据:

DELETE table_to_delete 
  FROM [DRILLHOLES_Export].[dbo].[WAMEX_Soil_Live] table_to_delete 
    INNER JOIN [DRILLHOLES_Export].[dbo].[FilestoUpate] table_with_keys 
      ON table_to_delete.[A_number]=table_with_keys.[A_number]

您还必须提供有关从何处删除数据的信息:table_to_delete