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