改成这样试一下,我怀疑你插入的顺序错了:CREATE TRIGGER [MakePrice] ON [dbo].[Cpinfo]
FOR Insert
AS
declare @N varchar (9),
@D varchar(5)
select @N=cPriceTable,@D=bFlag from Inserted
if @D='1'
exec ('insert ' + @N+' (cG_Code,cG_Name,mG_price) Select cG_Code,cG_Name,case when (mG_uprice<>0) then 0 else mG_uprice end as mG_price From Gpinfo')
go
好象还是有问题,你每次都把Gpinfo表倒到你cPriceTable字段指定的表,有主键肯定会重复!
你还是写明白你要做的功能吧!
FOR Insert
AS
declare @N varchar (9),
@D varchar(5)
select @N=cPriceTable,@D=bFlag from Inserted
if @D='1'
exec ('insert ' + @N+' (cG_Code,cG_Name,mG_price) Select cG_Code,cG_Name,case when (mG_uprice<>0) then 0 else mG_uprice end as mG_price From Gpinfo')
go
好象还是有问题,你每次都把Gpinfo表倒到你cPriceTable字段指定的表,有主键肯定会重复!
你还是写明白你要做的功能吧!
我要实现的就是当向cuinfo里增一条记录时如果BFLAG为真就把GPINFO INSERT到一个新表,表名是cPrcieTable,cpricetable自动生成的(=price+cG_Code)
当INSERTED表的记录有多条时,这个触发器一定是错误的!
谢谢你!
我原以为他有表!
好多人写不能处理多条的触发器,习以为常了!呵呵他现在的问题,我已经不知道问题在哪里了,等高手来解决吧!
你可以把触发器DROP掉试试程序,看还有没有错误,如果没有了,试试把触发器改成:CREATE TRIGGER [MakePrice] ON [dbo].[Cpinfo]
FOR Insert
AS
set nocount on
declare @N varchar (9),
@D varchar(5)
select @N=cPriceTable,@D=bFlag from Inserted
if @D='1'
exec ('set nocount on Select cG_Code as cG_Code,cG_Name as cG_Name,case when(mG_uprice<>0) then 0 else mG_uprice end as mG_price into ' + @N+' From Gpinfo')go
SET NOCOUNT
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。语法
SET NOCOUNT { ON | OFF }注释
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。