http://topic.csdn.net/u/20111114/08/d3e0960c-aa48-4feb-af84-65d5d6082569.html?seed=1887072683&r=76480850#r_76480850
USE tempdb
go
CREATE TABLE PurchOutProduct(Qty int)
go
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted where Qty<=0)
rollback TRAN
GO
INSERT PurchOutProduct SELECT 10SELECT * FROM PurchOutProduct
/*
10
*/
INSERT PurchOutProduct SELECT -10/*
訊息 3609,層級 16,狀態 1,行 1
交易在觸發程序中結束。已中止批次。*/
我按上面的单独去建是个数据库来测试,没有问题, 但在ERP系统上的表就有问题了,就会提示   伺服器: 訊息 245,層級 16,狀態 1,行 1
將 varchar 數值 '40.00' 轉換成資料型別為 int 的資料行語法錯誤。的, 这是什么原因呢?难道ERP系统有限制!

解决方案 »

  1.   

     Qty 是字符型的?
    cast( Qty as int) 看看
      

  2.   

     ERP系统表类型为这样的,  上面的我忘记说了我建字段的时候是qty是varchar(13)类型
      

  3.   

    Qty非數據類型,可有這樣的提示 在數字上加''引號
      

  4.   

    Create trigger tr_PurchOutProduct on PurchOutProduct
    for insert
    as
    if exists(select 1 from inserted where cast(Qty as decimal(18,2))<=0)
    rollback TRAN最好改字段類型
      

  5.   

    ALTER TABLE PurchOutProduct ALTER COLUMN Qty DECIMAL(18,2)改類型,保留兩位小數
      

  6.   

    是的,都需要轉換ALTER TABLE PurchOutProduct
    ADD CONSTRAINT 約束名 CHECK (cast(Qty as decimal(18,2) >=0);
      

  7.   


    报如下错 伺服器: 訊息 2812,層級 16,狀態 62,行 1
    找不到預存程序 't'。试了一下改字段类型不能保存,会提示报错 ERP系统资料表类型确定了应该不能随便改吧!
      

  8.   

    ALTER TABLE PurchOutProduct
    ADD CONSTRAINT 約束名 CHECK (cast(Qty as decimal(18,2) >=0);
    报如下错 伺服器: 訊息 2812,層級 16,狀態 62,行 1
    找不到預存程序 't'。试了一下改字段类型不能保存,会提示报错 ERP系统资料表类型确定了应该不能随便改吧!
      

  9.   

    ALTER TABLE PurchOutProduct
    ADD CONSTRAINT  ck_purchoutproduct  CHECK (cast(Qty as decimal(18,2) >=0);伺服器: 訊息 170,層級 15,狀態 1,行 2
    行 2: '>' 附近的語法不正確。