我从sysobjects中选出了一部分表名,然后要删除这部分表的一个字段等于某个值的记录。
我现在用的方法是用游标把表名取到一个变量中,然后delete from 变量
结果语法出错,
请问delete from 后跟的表名是变量该怎么写?
我查了帮助,但没看懂里面的table_source是怎么搞。
或者大家有更好的方法请告知。
...全文
569打赏收藏
删除多个表相关数据的存储过程
我从sysobjects中选出了一部分表名,然后要删除这部分表的一个字段等于某个值的记录。 我现在用的方法是用游标把表名取到一个变量中,然后delete from 变量 结果语法出错, 请问delete from 后跟的表名是变量该怎么写? 我查了帮助,但没看懂里面的table_source是怎么搞。 或者大家有更好的方法请告知。
楼上,搂主可能不知道表熟练所以它不能用触发器。
我试了试,没有问题阿,我不知道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要好点。
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;
/
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
我在查询分析中这样写的,不行呀,,
------------------------------------------
--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
------------------------------------------