限制插入数据
时间:2011-11-14
来源:互联网
我现在有表PurchOutProduct 字段qty 如果向表qty 插入的数据是 比如:(—10)不允许插入, (10)这样的就允许插入 数字是变动的,只要带有‘-’就不允许 不让保存。这张单据是两个表组成的,不知道写触发器还要不要考虑另一个表PurchOutbase
作者: a544589668 发布时间: 2011-11-14
SQL code
ALTER TABLE PurchOutProduct ADD CONSTRAINT ck_qty_PurchOutProduct CHECK (qty >=0); GO ALTER TABLE PurchOutbase ADD CONSTRAINT ck_qty_PurchOutbase CHECK (qty >=0); GO
作者: OrchidCat 发布时间: 2011-11-14
用检查就行了 Create table PurchOutProduct( Qty int check (Qty>0) )
作者: roy_88 发布时间: 2011-11-14
SQL code
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
作者: roy_88 发布时间: 2011-11-14
号外:
你的标题应该改一下,如何用触发器限制插入数据,这样会更好些.
作者: xiaolinyouni 发布时间: 2011-11-14
作者: HEROWANG 发布时间: 2011-11-14
作者: jyh070207 发布时间: 2011-11-14
SQL code
用检查就行了
Create table PurchOutProduct(
Qty int check (Qty>0)
)
用检查,这检查语句放哪里呢?
作者: a544589668 发布时间: 2011-11-14
作者: a544589668 发布时间: 2011-11-14
触发器这样实现
SQL code
Create table PurchOutProduct(
Qty int
)
go
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted where Qty<=0)
rol……
这触发器看得懂, 有一个地方我一直没弄明白,我看到多很人都在select 后面都用到一个‘1’ (是数字1是吧)这个是起什么作用的。
作者: a544589668 发布时间: 2011-11-14
所以用select 1就可以了
作者: pengxuan 发布时间: 2011-11-14
作者: a544589668 发布时间: 2011-11-14
Create trigger tr_PurchOutProduct on PurchOutProduct for insert as insert into PurchOutProduct select * from inserted where not exists (select 1 from inserted where qty<0)
作者: q465897859 发布时间: 2011-11-14
--检查约束: ALTER TABLE PurchOutProduct ADD CONSTRAINT ck_qty_PurchOutProduct CHECK (qty >=0); GO
作者: fredrickhu 发布时间: 2011-11-14
引用 2 楼 roy_88 的回复:
SQL code
用检查就行了
Create table PurchOutProduct(
Qty int check (Qty>0)
)
用检查,这检查语句放哪里呢?
建表時加
如果表已存在
可用 alter table PurchOutProduct add constraint 約束名(自定義) check (Qtt>00)
作者: roy_88 发布时间: 2011-11-14
触发器这样实现
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted where Qty<=0)
rollback tran
这样写是可以触发, 但有一个问题正数的不能保存哦,反而要限制的小于零的能保存了.
作者: a544589668 发布时间: 2011-11-14
SQL code
--检查约束:
ALTER TABLE PurchOutProduct
ADD CONSTRAINT ck_qty_PurchOutProduct CHECK (qty >=0);
GO
伺服器: 訊息 245,層級 16,狀態 1,行 1
將 varchar 數值 '40.00' 轉換成資料型別為 int 的資料行語法錯誤。
报错
作者: a544589668 发布时间: 2011-11-14
引用 3 楼 roy_88 的回复:
触发器这样实现
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted where Qty<=0)
rollback tran
这样写是可以触发, 但有一个问题正数的不能保存哦,反而要……
不會,你自己測測就知了
SQL code
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 10 SELECT * FROM PurchOutProduct /* 10 */ INSERT PurchOutProduct SELECT -10 /* 訊息 3609,層級 16,狀態 1,行 1 交易在觸發程序中結束。已中止批次。 */
作者: roy_88 发布时间: 2011-11-14
if object_id('tb','U') is not null drop table tb go create table tb ( id int identity(1,1), name varchar(10), age int check(age>10), address varchar (10) ) go insert into tb (name,age) select '张三',3
建立CHECK约束就可以,像上面这个一样
作者: pengxuan 发布时间: 2011-11-14
引用 15 楼 a544589668 的回复:
引用 3 楼 roy_88 的回复:
触发器这样实现
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted where Qty<=0)
rollback tran
这样写……
会的,如图:

作者: a544589668 发布时间: 2011-11-14
引用 15 楼 a544589668 的回复:
引用 3 楼 roy_88 的回复:
触发器这样实现
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted where Qty<=0)
rollback tran
这样写……
上面那个图传错了 这张才对:

作者: a544589668 发布时间: 2011-11-14
引用 3 楼 roy_88 的回复:
触发器这样实现
SQL code
Create table PurchOutProduct(
Qty int
)
go
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted whe……
作者: szstephenzhou 发布时间: 2011-11-14
作者: szstephenzhou 发布时间: 2011-11-14
1就是*的意思
引用 9 楼 a544589668 的回复:
引用 3 楼 roy_88 的回复:
触发器这样实现
SQL code
Create table PurchOutProduct(
Qty int
)
go
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
i……
问题我的表已经有了的呀, 不能在用 SQL code
Create table PurchOutProduct(
Qty int
作者: a544589668 发布时间: 2011-11-14
作者: gogodiy 发布时间: 2011-11-14
10.00在楼主的系统里是varchar型?那就转换成decimal(10,2)再进行操作。另外还是建立CHECK更好些。
能帮忙写一下吗? 对于转换我不会呢? 我还在学习中....
作者: a544589668 发布时间: 2011-11-14
SQL code
Create table PurchOutProduct( Qty varchar(50) ) go Create trigger tr_PurchOutProduct on PurchOutProduct for insert as if exists(select 1 from inserted where Qty<=0) rollback tran
作者: sadikaqy 发布时间: 2011-11-14
创建表时Qty的类型为varchar就好啦
SQL code
Create table PurchOutProduct(
Qty varchar(50)
)
go
Create trigger tr_PurchOutProduct on PurchOutProduct
for insert
as
if exists(select 1 from inserted wher……
我已经有表的, 而这个表这个字段风类型还是qty varchar(13)
作者: a544589668 发布时间: 2011-11-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28