Dynamic 选择distinct from table to temp,然后将temp重新加载回主表

Dynamic 选择distinct from table to temp,然后将temp重新加载回主表,dynamic,insert-into,Dynamic,Insert Into,我正在为如何实现动态sql的语法而苦苦挣扎 我想做什么 从主表中选择不同的记录 把那些记录放到临时表中 从主表中清除记录 然后从临时表中选择不同的数据返回主表 我已经在检查主表,并用包含重复数据的表列表填充临时表 然后,通过循环该临时表中的每一行来查看哪些表是重复的,使用光标,我希望使用实际的表名(加载到变量中),然后从该表中选择不同的记录到另一个临时表中 然后我想清除主表,并将不同的数据从temp重新加载到主表中 这是游标前的语句,用于加载第一个具有重复表名的临时表 INSERT INTO

我正在为如何实现动态sql的语法而苦苦挣扎

我想做什么

  • 从主表中选择不同的记录
  • 把那些记录放到临时表中
  • 从主表中清除记录
  • 然后从临时表中选择不同的数据返回主表
我已经在检查主表,并用包含重复数据的表列表填充临时表

然后,通过循环该临时表中的每一行来查看哪些表是重复的,使用光标,我希望使用实际的表名(加载到变量中),然后从该表中选择不同的记录到另一个临时表中

然后我想清除主表,并将不同的数据从temp重新加载到主表中

这是游标前的语句,用于加载第一个具有重复表名的临时表

INSERT INTO #TEMP_TBL_DUP_CNT
select cast(@rec_cnt as varchar(10)) reccnt, cast(@tbl_name as varchar(200)) 
tblnm
这是我下面的光标,我把我的想法编号在1-4下面,与上面的项目列表相关。语法是我正在努力解决的问题,我想帮助你如何创建它

DECLARE REC_CURSOR CURSOR FOR
-- Set select stamtent for cursor

select reccnt, tblnm
from #TEMP_TBL_DUP_CNT

OPEN REC_CURSOR
FETCH NEXT FROM REC_CURSOR INTO @rec_cnt, @tbl_name

WHILE @@FETCH_STATUS = 0

BEGIN 

-- Check if record count is 0
-- if is larger than 0 then select distinct records from tbl name into
-- temp table

if @rec_cnt > 0

-- Need to load data into new temp table using dynamic SQL and @tbl_name 
-- Ideally wanted to create a temp Table with dynamic name like 
-- '#TEMP_' + @tbl_name giving #temp_Table_Name_1, #temp_Table_Name_2 etc.
-- 

 1) Starting with something like :

-- SET @tbl_temp = '#TEMP_' + @tbl_name

 2) Then select distinct * into temp like this:

-- SELECT 'distinct * INTO ' + @tbl_temp + ' FROM ' + @tbl_name

 3) Then clear main table

-- TRUNCATE TABLE + '@tbl_name'

 4) Then select from temp back into main table

-- SELECT '* INTO ' + @tbl_name + ' FROM ' + @tbl_temp

FETCH NEXT FROM REC_CURSOR INTO @rec_cnt, @tbl_name
END

CLOSE REC_CURSOR
DEALLOCATE REC_CURSOR
谢谢


Andrew

为什么要这样做,而不是将原始数据重命名为备份,将临时数据重命名为新的原始数据表?@mootmoot好的,我从来没有想过备份,更多的是动态SQL,我可以将其作为过程的一部分,有道理。在对临时表进行重命名后,别忘了重新创建索引。@mootmoot我现在没有索引。有人能帮我处理实际的动态SQL吗,如如何执行插入、选择等?