+ -
当前位置:首页 → 问答吧 → 新手求助~求sql语句

新手求助~求sql语句

时间:2011-11-24

来源:互联网

利用查询分析器创建AFTER类型的触发器,当公司名称长度小于2时,将插入的数据删除;
公司表名CompanyInfo 
  公司名称是CName..

作者: l405519201   发布时间: 2011-11-24

SQL code

if object_id('CompanyInfo','U') is not null
   drop table CompanyInfo
go
create table CompanyInfo
(
 name varchar(10)
)
go
if object_id('trCompanyInfo','TR')is not null
   drop trigger trCompanyInfo
go
create trigger trCompanyInfo on CompanyInfo
for insert
as
  if exists(select 1 from inserted where len(name)<2)
     rollback
go
insert into CompanyInfo values ('a')

作者: pengxuan   发布时间: 2011-11-24

加個檢查就行了

check len(Name)>2

作者: roy_88   发布时间: 2011-11-24

触发器。

作者: fredrickhu   发布时间: 2011-11-24

也可以用check 约束。

作者: fredrickhu   发布时间: 2011-11-24

SQL code
create table CompanyInfo
(
 name varchar(10) NOT NULL CHECK (LEN(name)>2)
)
GO
INSERT INTO CompanyInfo SELECT 'a'

/*
訊息 547,層級 16,狀態 0,行 1
INSERT 陳述式與 CHECK 條件約束 "CK__CompanyInf__name__45F365D3" 衝突。衝突發生在資料庫 "tempdb",資料表 "dbo.CompanyInfo", column 'name'。
陳述式已經結束。

*/

作者: roy_88   发布时间: 2011-11-24

SQL code

--注意:mssql的触发器是语句级的,而不是行级。如果一次插入多个此触发器效果基本报废,只能逐条插入
create trigger trig_test on CompanyInfo
for insert
as

if exists(select 1 from inserted where len(Cname)<2)
    rollback


作者: geniuswjt   发布时间: 2011-11-24

沒必要用觸發器

在插入前就檢查,比插入后觸發器檢查再刪除效率高

作者: roy_88   发布时间: 2011-11-24

引用 3 楼 fredrickhu 的回复:
触发器。


  - -.我是新手

作者: l405519201   发布时间: 2011-11-24

引用 1 楼 pengxuan 的回复:
SQL code

if object_id('CompanyInfo','U') is not null
drop table CompanyInfo
go
create table CompanyInfo
(
name varchar(10)
)
go
if object_id('trCompanyInfo','TR')is not null
drop tr……


 谢了~辛苦了~

作者: l405519201   发布时间: 2011-11-24

引用 6 楼 geniuswjt 的回复:
SQL code

--注意:mssql的触发器是语句级的,而不是行级。如果一次插入多个此触发器效果基本报废,只能逐条插入
create trigger trig_test on CompanyInfo
for insert
as

if exists(select 1 from inserted where len(Cname)<2)
rollback


  我就用你这个了~

作者: l405519201   发布时间: 2011-11-24