您的位置:首页 > 其它

CURSOR 游标中动态表查询

2012-10-19 17:42 176 查看
--今天需要删除项目下面的所有发包,每个发包都有不同的类型,每个类型又有不同表,所以就遇到了动态FOR select表的情况
declare @PROJECT_ID varchar(50),@tablename varchar(50), @wf_b_id varchar(50),@wfid varchar(20),@Sql varchar(500)

set @PROJECT_ID='P2012189'
set @wfid=''
set @tablename=''
begin
exec('select tablename into newtable from PM_GCPS_TBL')--这里将表名存到一个新表中,很多方式的
DECLARE MyCursor CURSOR
FOR select tablename from newtable

OPEN MyCursor
FETCH NEXT FROM  MyCursor INTO @tablename
WHILE @@FETCH_STATUS =0
BEGIN

--这块是重点PROJECT_ID='''+@PROJECT_ID+''+'''' 项目ID 是字符型的 ,这么多‘'’很不好把握
SET @Sql='DECLARE MyCursor2 CURSOR  FOR select wf_b_id from '+ @tablename+' where PROJECT_ID='''+@PROJECT_ID+''+''''

EXEC(@Sql)

OPEN MyCursor2
FETCH NEXT FROM  MyCursor2 INTO @wf_b_id
WHILE @@FETCH_STATUS =0
BEGIN

set @wfid=(select wf_link_id from WF_TYPE_LINK_VALUE_TBL where link_value=@wf_b_id)
delete WF_TYPE_LINK_VALUE_TBL where link_value=@wf_b_id
delete WF_STEP_TBL where wf_id=@wfid
--这块也是
set @Sql = 'delete from '+@tablename+' where wf_b_id='''+@wf_b_id+''+''''
exec (@sql)

FETCH NEXT FROM  MyCursor2 INTO @wf_b_id
END
CLOSE MyCursor2
DEALLOCATE MyCursor2

FETCH NEXT FROM  MyCursor INTO @tablename
END
CLOSE MyCursor
DEALLOCATE MyCursor

end
drop table newtable
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: