读书人

ms sql触发器有关问题

发布时间: 2012-03-11 18:15:38 作者: rapoo

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(""物料代码为 "+@s+" 超出库存数,单据不允许保存!"",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(''物料代码为 '+@s+' 超出库存数,单据不允许保存!'',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) +@s+ 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 


[解决办法]

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(''物料代码为 '+@s+' 超出库存数,单据不允许保存!'',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(''物料代码为 ' +@s+ '  超出库存数,单据不允许保存!'',18,1)')  rollback tran  end  set nocount off  go 

读书人网 >SQL Server

热点推荐