当前位置: 代码迷 >> Sql Server >> ms sql触发器有关问题
  详细解决方案

ms sql触发器有关问题

热度:16   发布时间:2016-04-27 18:06:35.0
ms sql触发器问题
触发器代码如下:create trigger up_SEOutStock on SEOutStock 
for insert 
as 
set nocount on 
if exists( 
select 1 
from inserted c 
join seoutstockentry d 
on c.finterid=d.finterid 
join ( 
select fitemid,sum(fqty) 库存数量 
from ICInventory 
group by fitemid) e 
on d.fitemid=e.fitemid 
where d.fqty>e.库存数量) 
begin 
declare @s varchar(1000) 
select @s=isnull(@s+",","")+f.fnumber 
from inserted c 
join seoutstockentry d 
on c.finterid=d.finterid 
join ( 
select fitemid,sum(fqty) 库存数量 
from ICInventory 
group by fitemid) e 
on d.fitemid=e.fitemid 
join t_icitem f 
on d.fitemid=f.fitemid 
where d.fqty>e.库存数量 
exec("raiserror(""物料代码为 "[email protected]+" 超出库存数,单据不允许保存!"",18,1)") 
rollback tran 
end 
set nocount off 
go 
上面触发器语句执行 提示一下错误:
消息 1038,级别 15,状态 3,过程 up_SEOutStock,第 18 行
不能使用空白的对象或列名。如果必要,请使用一个空格。
消息 170,级别 15,状态 1,过程 up_SEOutStock,第 30 行
第 30 行: 'raiserror("物料代码为 ' 附近有语法错误。



------解决方案--------------------
try:
SQL code
create trigger up_SEOutStock on SEOutStock  for insert  as  set nocount on  if exists(  select 1  from inserted c  join seoutstockentry d  on c.finterid=d.finterid  join (  select fitemid,sum(fqty) 库存数量  from ICInventory  group by fitemid) e  on d.fitemid=e.fitemid  where d.fqty>e.库存数量)  begin  declare @s varchar(1000)  select @s=isnull(@s+',','')+f.fnumber  from inserted c  join seoutstockentry d  on c.finterid=d.finterid  join (  select fitemid,sum(fqty) 库存数量  from ICInventory  group by fitemid) e  on d.fitemid=e.fitemid  join t_icitem f  on d.fitemid=f.fitemid  where d.fqty>e.库存数量  exec('raiserror(''物料代码为 [email protected]+' 超出库存数,单据不允许保存!'',18,1)')  rollback tran  end  set nocount off  go
------解决方案--------------------
将" 变成' 试试
------解决方案--------------------
SQL code
create trigger up_SEOutStock on SEOutStock  for insert  as  set nocount on  if exists(  select 1  from inserted c  join seoutstockentry d  on c.finterid=d.finterid  join (  select fitemid,sum(fqty) 库存数量  from ICInventory  group by fitemid) e  on d.fitemid=e.fitemid  where d.fqty>e.库存数量)  begin  declare @s varchar(1000)  select @s=isnull(@s+',','')+f.fnumber  from inserted c  join seoutstockentry d  on c.finterid=d.finterid  join (  select fitemid,sum(fqty) 库存数量  from ICInventory  group by fitemid) e  on d.fitemid=e.fitemid  join t_icitem f  on d.fitemid=f.fitemid  where d.fqty>e.库存数量  exec('raiserror('物料代码为 char(39) [email protected]+ char(39) 超出库存数,单据不允许保存!',18,1)')  rollback tran  end  set nocount off  go
------解决方案--------------------
SQL code
CREATE TRIGGER up_SEOutStockON SEOutStockFOR  INSERTAS    SET NOCOUNT ON      IF EXISTS(           SELECT 1           FROM   INSERTED c                  JOIN seoutstockentry d                       ON  c.finterid = d.finterid                  JOIN (                           SELECT fitemid,                                  SUM(fqty) 库存数量                           FROM   ICInventory                           GROUP BY                                  fitemid                       ) e                       ON  d.fitemid = e.fitemid           WHERE  d.fqty > e.库存数量       )    BEGIN        DECLARE @s VARCHAR(1000)          SELECT @s = ISNULL(@s + ',', '') + f.fnumber        FROM   INSERTED c               JOIN seoutstockentry d                    ON  c.finterid = d.finterid               JOIN (                        SELECT fitemid,                               SUM(fqty) 库存数量                        FROM   ICInventory                        GROUP BY                               fitemid                    ) e                    ON  d.fitemid = e.fitemid               JOIN t_icitem f                    ON  d.fitemid = f.fitemid        WHERE  d.fqty > e.库存数量                EXEC ('raiserror(''物料代码为 ' + @s + ' 超出库存数,单据不允许保存!,18,1)')                ROLLBACK TRAN    END        SET NOCOUNT OFFGO
  相关解决方案