选择从表中分离为temp然后将temp重新加载回主表

时间:2017-05-08 10:40:26

标签: dynamic insert-into

我正在努力解决如何为此做动态sql的语法。

我想做什么

  • 从主表中选择不同的记录
  • 将这些记录放入临时表
  • 清除主表中的记录
  • 然后从temp中选择不同的数据回到主表

我已经在检查主表并使用包含重复数据的表列表填充临时表。

然后通过循环遍历该临时表中的每一行以查看哪些表是重复的,使用游标,我想使用实际的表名,该名称被加载到变量中,然后选择 distinct 将此表中的记录转换为另一个临时表。

然后我想清除主表并将不同数据从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

由于

安德鲁

0 个答案:

没有答案