删除多个表相关数据的存储过程

chinesegump 2003-01-08 10:09:28
我从sysobjects中选出了一部分表名,然后要删除这部分表的一个字段等于某个值的记录。
我现在用的方法是用游标把表名取到一个变量中,然后delete from 变量
结果语法出错,
请问delete from 后跟的表名是变量该怎么写?
我查了帮助,但没看懂里面的table_source是怎么搞。
或者大家有更好的方法请告知。
...全文
56 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DJMPH 2003-01-08
  • 打赏
  • 举报
回复
楼上,搂主可能不知道表熟练所以它不能用触发器。
我试了试,没有问题阿,我不知道Could not find stored procedure怎么会出来,你是不是还有其他的东西。
还有,你的fetch没有循环,所以结果就是@@FETCH_STATUS一直都是一个值,当有数据的时候WHILE @@FETCH_STATUS = 0就一直为真,那么你就成了死循环了。
要改改。
'DELETE FROM'+@table_name+' WHERE drug_code='+@drug_code在from后家个空格'DELETE FROM '+@table_name+' WHERE drug_code='+@drug_code要好点。
scorcer 2003-01-08
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER TRG_DELETE_EMPINFO
BEFORE DELETE ON TB_EMPINFO
FOR EACH ROW
BEGIN
DELETE FROM TB_EMPEDU WHERE TB_EMPEDU.FD_EMPID=:OLD.FD_EMPID;
DELETE FROM TB_EMPEXPERIENCE WHERE TB_EMPEXPERIENCE.FD_EMPID=:OLD.FD_EMPID;
END;
/

表TB_EMPEDU ,表TB_EMPEXPERIENCE 都是和表TB_EMPINFO相关联的
chinesegump 2003-01-08
  • 打赏
  • 举报
回复
用set或select
都报如下错误:
服务器: 消息 2812,级别 16,状态 62,行 17
Could not find stored procedure 'DELETE FROM disrepair_account_book WHERE drug_code= 1010 '
DJMPH 2003-01-08
  • 打赏
  • 举报
回复
BEGIN
@sql='DELETE FROM'+@table_name+' WHERE drug_code='+@drug_code
exec (@sql)
END

你明显在第二行少了东西了。应该是:
set @sql='DELETE FROM'+@table_name+' WHERE drug_code='+@drug_code

select @sql='DELETE FROM'+@table_name+' WHERE drug_code='+@drug_code
chinesegump 2003-01-08
  • 打赏
  • 举报
回复
我在查询分析中这样写的,不行呀,,
------------------------------------------
--set nocount on
declare @table_name char(30),@sql varchar(100),@drug_code char(20)
declare find_table_name_set cursor for
select name
from sysobjects
where (id in (select id from syscolumns where name='drug_code'))
and (id<>1716917188)
and (xtype<>'v')
OPEN find_table_name_set

FETCH NEXT FROM find_table_name_set
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
@sql='DELETE FROM'+@table_name+' WHERE drug_code='+@drug_code
exec (@sql)
END
close find_table_name_set
deallocate find_table_name_set
------------------------------------------
DJMPH 2003-01-08
  • 打赏
  • 举报
回复
同意楼上,
@sql varchar(1000)
@table varchar(100)
.....
begin
fetch XXX into @table
set @sql = 'delete from ' + @table
exec (@sql)
end
....
SilverSands 2003-01-08
  • 打赏
  • 举报
回复
把它写成整个字符串,然后执行一下。
string aa
aa = 'delete from ' + 变量
exec aa;
大概是这意思,试试先!
chinesegump 2003-01-08
  • 打赏
  • 举报
回复
嗯,@sql没有加括号的原因。
谢谢大家!
结贴.
888888888888 2003-01-08
  • 打赏
  • 举报
回复
同意楼上

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧