关于SQL Server中限制值的范围的问题。

我现在有一个列D,是一个SMALLINT,是一个计数器,通过触发器来加减1,我希望当列D等于8而触发器仍旧要给他加1的时候弹出提示“已达到上限”,并且触发此次触发器的操作... 我现在有一个列D,是一个SMALLINT,是一个计数器,通过触发器来加减1,我希望当列D等于8而触发器仍旧要给他加1的时候弹出提示“已达到上限”,并且触发此次触发器的操作不执行,给全分,谢谢大家了。 展开
 我来答
邢智俟朝旭
2020-06-06 · TA获得超过3955个赞
知道大有可为答主
回答量:3039
采纳率:25%
帮助的人:467万
展开全部
简单的范围可以使用check约束
使用的是sql
server
2008简单说一下从sql
server
management
studio
中创建check,右击表格---选择设计----右击要进行限制的列----选择check约束----在表达式中输入限制条件,例如,id>10,修改一下名字,关闭就可以了;
还可以用命令创建,用命令创建check约束分为,创建表时候建立约束和创建表之后建立约束,可查看相关书籍资料,有详细描述。
p.s.
check约束是通过check约束中的表达式确定有效值,不是基于其它表格获取有效值
wjinbd
2008-12-22 · TA获得超过8686个赞
知道大有可为答主
回答量:1536
采纳率:100%
帮助的人:2021万
展开全部
CREATE TRIGGER INSERTJY ON [dbo].[JY]
FOR INSERT
AS
BEGIN
DECLARE @借书证号 CHAR (10),@ISBN CHAR(10)
SELECT @借书证号=借书证号,@ISBN=ISBN
FROM inserted

declare @c int

select @c=借书量 from xs where @借书证号=借书证号

if(@c>=8)

begin

print '到达极限了'

rollback tran

return

end
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雪舞樱蛇
2008-12-22 · TA获得超过631个赞
知道答主
回答量:93
采纳率:0%
帮助的人:55.3万
展开全部
(1) 数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc]"
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 in (值1,值2,值3)"
sql="select * from 数据表 where 字段名 between 值1 and 值2"
(2) 更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
(3) 删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)
(4) 添加数据记录:
sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)
(5) 数据记录统计函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)
用 rs("别名") 获取统的计值,其它函数运用同上。
(5) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名称 (永久性删除一个数据表)
在ASP编程时,下面这些语句是必须知道的:
1.连接数据库
a. ASP与Access数据库连接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("数据库名称.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile
%>
b. ASP与SQL数据库连接:
<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%>
建立记录集对象:
set rs=server.createobject("adodb.recordset")
rs.open SQL语句,conn,3,2
2. 记录集对象的方法:
rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录
附:
常数 常数值 说明
--------------------------------
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。
--------------------------------------------------------------------------------
郑重声明:
本贴仅代表【连连】个人观点,与【耒水小鲢鱼论坛】无关。
INSERT INTO 表名 ("字段") VALUES ("值")
------------
简单数据操纵语言:
SELECT
INSERT DELETE UPDATE
*******************************************************************/
/*******************************************************************
简单查询:
SELECT语句的基本用法
*
定义列名
IDENTITYCOL
TOP
WITH TIES
WHERE 子句
比较操作符:
= <> != < > >= <= !> !<
布尔操作符:
NOT AND OR
谓词:
IN 、 BETWEEN AND
谓词往往不是必需的,它们可以由一般的运算组合代替,但能使语意更清晰
DISTINCT
DISTINCT 必需在所有字段前
作用于所有列,DISTINCT将显示所有列的组合各不相同的行
IS NULL ISNULL()
LIKE % _ [] ^ ESCAPE-->'[_]' = '!_'ESCAPE'!'
ORDER BY 子句
ASC DESC
聚集函数:MIN、MAX、SUM、AVG、COUNT
GROUP BY 子句
分类汇总
出现在查询的SELECT列表中的每一列都必须同时出现在GROUP BY的子句中,对于常量和作为聚集函数一部分的列来说,不受次限制约束。
GROUP BY子句中的表名序列不需要与SELECT列表中的表名序列相对应
HAVING 子句
与WHERE类似,但搭配的对象不同
聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中
HAVING子句与WHERE子句的区别:三条.....
小结:
WHERE子句用于对每一条记录做筛选,GROUP BY子句用于多条同类记录作统计。
COMPUTE 子句
COMPUTE 与 COMPUTE BY
COMPUTE 子句中的所有列都必须出现在SELECT 列表中
COMPUTE BY 子句中的每一列都必须出现在ORDER BY 子句中
COMPUTE 和 ORDER BY 子句中列的顺序必须一致
计算列
用来创建计算列的列必须是属于同一张表中的
不能将DEFAULT约束附加给计算列
计算列中不能包含子查询
SELECT INTO 建表
不允许和COMPUTE 子句一起使用,因为COMPUTE 子句的结果不是一张表。
补充:临时表
临时表存储在系统数据库tempdb中
临时表会被系统隐式地丢弃
*******************************************************************/
SELECT location ,department_name FROM department
SELECT * FROM department
SELECT department_name AS '部门名称',location '地点' FROM department
-----------------------------------------------------------------
SELECT TOP 3 * FROM department
-----------------------------------------------------------------
SELECT location FROM department
WHERE department_name='学术部'
SELECT * FROM employee
WHERE age<25
--查询斯瑞年轻的员工(女的25以下算年轻,男的30以下算年轻)
SELECT * FROM employee
WHERE (age<25 AND sex='女')
OR (age<30 AND sex='男')--注意运算顺序:NOT>AND>OR
SELECT * FROM employee
WHERE department_id IN('002','005')--NOT IN
SELECT * FROM employee
WHERE age BETWEEN 20 AND 40--NOT BETWEEN
--查询斯瑞有哪些部门(不包括暂时没有员工的部门)
SELECT DISTINCT department_id FROM employee
SELECT * FROM employee
WHERE department_id IS NULL--IS NOT NULL
SELECT employee_id,ISNULL(department_id,'department unknown') AS dep FROM employee --注意ISNULL中参数的类型
-----------------------------------------------------------------
SELECT * FROM employee
ORDER BY age DESC --默认ASC
--思考:查找年龄最大的员工
SELECT TOP 1 employee_name FROM employee
ORDER BY age DESC
SELECT * FROM teach
ORDER BY employee_id ,course_id DESC
SELECT * FROM teach
ORDER BY 1,2 DESC
-----------------------------------------------------------------
--最小员工年龄
SELECT MIN(age) as min_age FROM employee --注意别名
--每个部门的人数
SELECT department_id,COUNT(*)dep_count FROM employee
GROUP BY department_id
--哪些部门只有男生或女生
SELECT department_id,COUNT(DISTINCT sex)dep_count FROM employee --消除重复
GROUP BY department_id
--每个部门的平均年龄
SELECT department_id,AVG(age)min_age FROM employee
GROUP BY department_id
--每位老师所带的课程数
SELECT employee_id,COUNT(*)teach_count FROM teach
GROUP BY employee_id
--每门课有几个老师在带
SELECT course_id,COUNT(distinct employee_id)teach_count FROM teach
GROUP BY course_id
--每位老师带过几个班同一个课
SELECT employee_id,course_id,count(class) FROM teach
GROUP BY employee_id,course_id
-----------------------------------------------------------------
--学术部的平均年龄
SELECT department_id,AVG(age)min_age FROM employee
GROUP BY department_id
HAVING department_id='005'
--平均年龄小于30岁的有哪几个部门
SELECT department_id,AVG(age)min_age FROM employee --HAVING与WHERE 用处的区别
GROUP BY department_id
HAVING AVG(age)<30
--SEA02 有几个老师在带
SELECT course_id,COUNT(*)teach_count FROM teach
GROUP BY course_id
HAVING course_id='SEA02'
--第一学期的几门课程有几个老师在带
SELECT course_id,COUNT(*)teach_count FROM teach
GROUP BY course_id
HAVING course_id LIKE 'SEA__'
-----------------------------------------------------------------
--查询每个员工的信息 并计算员工的平均工资
SELECT AVG(pay) FROM employee
SELECT * FROM employee
COMPUTE AVG(pay)
--查询每个员工的信息 并计算每个部门员工的平均工资
SELECT department_id,avg(pay) FROM employee
GROUP BY department_id
SELECT * FROM employee
ORDER BY department_id
COMPUTE AVG(pay) BY department_id
--思考:查询每个员工的信息 并计算每个部门的平均年龄
--扩展:一个SELECT 中可以包含多个COMPUTE 子句,一个COMPUTE 子句中又可以有多个聚集函数
SELECT * FROM employee
ORDER BY department_id
COMPUTE AVG(pay),SUM(pay) ,AVG(age) BY department_id
COMPUTE AVG(pay)
--注意:COMPUTE使用中需要注意的几点
--查询每位老师所带的课程,并计算出相应的课程数
SELECT employee_id,COUNT(*)teach_count FROM teach
GROUP BY employee_id
SELECT * FROM teach
ORDER BY employee_id
COMPUTE COUNT(course_id) BY employee_id
--ORDER BY 子句中列是有顺序的,COMPUTE 和 ORDER BY 子句中列的顺序必须一致
SELECT * FROM teach
ORDER BY employee_id,course_id
COMPUTE count(class) BY employee_id,course_id
-----------------------------------------------------------------
CREATE TABLE product
( product_id INT NOT NULL IDENTITY,
product_name CHAR(10) NOT NULL,
price MONEY,
quantity INT,
orderdate DATETIME,
total AS price*quantity,
shippeddate AS DATEADD(DAY,7,orderdate)
)
INSERT INTO product VALUES('苹果',2.5,50,'12.12.2005')
SELECT * FROM product
-----------------------------------------------------------------
CREATE TABLE #employee_temp
( id CHAR(18),
name CHAR(10) NOT NULL,
age INT
)
SELECT id ,employee_name,age INTO #employee_temp FROM employee
SELECT * FROM #employee_temp
--思考:不同数据库之间,数据的复制
--思考:使用SELECT INTO 修改表名、列名
/*******************************************************************
复杂查询:
--UNION
两张表之间的联接方式
笛卡儿积
等值联接
自然联接
θ联接
多于两张表的联接
将表与自身联结
子查询
子查询与其它联接查询的思维方式
多于两级的子查询
涉及聚集函数的子查询
*******************************************************************/
-----------------------------------------------------------------
--笛卡儿积
SELECT employee.*,department.* FROM employee,department
SELECT * FROM employee,department
--问:产生多少条记录
SELECT COUNT(*)AS Employee FROM employee
SELECT COUNT(*)AS Department FROM department
SELECT COUNT(*)AS EmployeeJoinDepartment FROM employee,department
--等值联接
SELECT employee.*,department.* FROM employee,department
WHERE employee.department_id=department.department_id
--自然联接
SELECT employee.*,department.department_name,department.location FROM employee,department
WHERE employee.department_id=department.department_id
小结:
需要查哪些字段? 把需要的字段把在SELECT里
这个查询需要用到哪些表呢? 把它们放在FROM里
怎么联接各条记录? 把各表之间的联系用等值联接放在WHERE里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式