现在总算能实现,但还是很困惑,学习吧。。。
下面是修改后的代码。
Man1983 于 2007-8-10 下去记录
If exists(select name from sysobjects where name='tr_ins_Part' and type='tr')
drop trigger tr_ins_Part
go
create trigger tr_ins_Part on lyt_test_Part
for insert
as
Declare
@sTableName varchar(40),
@sPart_Ename varchar(20),
@sProductID char(4),
@sPartID char(4),
@sCount int,
@StrSql varchar(60)
Select @sPart_Ename=Part_Ename,@sProductID=ProductID,@sPartID=PartID from inserted
Select @sTableName=EngLish_Name From Lyt_test_Product where ProductID=@sProductID
Select @sCount=Count(PartID) From lyt_test_Part Where Part_Ename=@sPart_Ename
If @sCount>1
BEGIN
delete from lyt_test_Part where PartID=@spartID
END
else
set @StrSql='ALTER TABLE ['+@sTableName+'] ADD ['+@sPart_Ename+'] VARCHAR (255) NULL'
exec (@StrSql)
本来ELSE后面我是这样写的
ALTER TABLE [@sTableName] ADD [@sPart_Ename] VARCHAR (255) NULL
而不是现在的
set @StrSql='ALTER TABLE ['+@sTableName+'] ADD ['+@sPart_Ename+'] VARCHAR (255) NULL'
exec (@StrSql)
exec (@StrSql)是要特别注意带括号的,不然会提示
不是有效的字符
我困惑的是 用原先的 ,为什么在执行的时候变量他认不出来
说系统不存在这个表 '@sTableName'
怎么说你也要说数据库不存在'2440-b'吧,真是的。
表关系大概是这样
Product 表 存储的是我司所有产品的中文英文名称
每个产品在数据库里都以一个标的形似存在,比如我有个2440-b型号的产品
那么必须有个表和他对应
还有一个表 是lyt_test_Part
是放调试部位的
现在我添加一个Part_Name
则要触发在对应的产品标里添加一个字段[即调试部位或项目]
当然期间还有调试阶段等要去触发,这里就略掉。。
不管怎么说,我是相信了,在存储过程里或触发器里,可以动态创建修改表或字段。只是先前方法没到位
Man1983 于 2007-8-10 下去记录