现有两个表:订购单(订单编号,金额);订单明细(订单编号,单价,数量)。
金额=单价*数量;如何约束金额?
金额=单价*数量;如何约束金额?
解决方案 »
- 各位大侠,SQL SERVER 2008 海量数据导入excel?
- 我的简单问题
- sql server 2005, 备份的*.bak文件,拷贝到别的机子,需要重新建立数据库,如何操作?复原出错,急。
- 合并数据列的问题???
- 急!!!大家帮帮忙,给介绍个网址之类的,关于介绍sql教本相关内容。 我要用sql 语句来建表 ,给表增加字段。
- 急!!!XP上的MS-SQL Server的问题
- 只有10分了!今天写报表时出错,怎么办?详情请进!!!
- 高分求助:为什么SQL SERVER主机加入域后,客户机无法连接?总是提示:"超时已过期"?
- 请大家来帮帮忙!!!
- 如何一条Select能Sum两个字段的合集?
- _CommandPtr等 的意义?
- 求sql server2005中文版下载地址?
-- Author : htl258(Tony)
-- Date : 2010-05-15 18:33:15
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
-- Blog : http://blog.csdn.net/htl258
------------------------------------------------------------------------------------> 生成测试数据表: [订购单]
IF OBJECT_ID('[订购单]') IS NOT NULL
DROP TABLE [订购单]
GO
CREATE TABLE [订购单] ([订单编号] [int],[金额] [int])
INSERT INTO [订购单]
SELECT '1','12'--> 生成测试数据表: [订单明细]
IF OBJECT_ID('[订单明细]') IS NOT NULL
DROP TABLE [订单明细]
GO
CREATE TABLE [订单明细] ([订单编号] [int],[单价] [int],[数量] [int])
INSERT INTO [订单明细]
SELECT '1','3','4' UNION ALL
SELECT '2','5','8'SELECT * FROM [订购单]
SELECT * FROM [订单明细]-->SQL查询如下:
if object_id('f_getamount') is not null
drop function f_getamount
go
create function f_getamount
(@订单编号 int)
returns money
as
begin
return(select sum(单价*数量) from [订单明细] where [订单编号]=@订单编号)
end
go--创建约束:
alter table [订购单] add check([金额]=dbo.f_getamount([订单编号]))
goinsert [订购单] select 2,12
/*
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 CHECK 约束"CK__订购单__3F1C4B12"冲突。该冲突发生于数据库"mydb",表"dbo.订购单"。
语句已终止。
*/
insert [订购单] select 2,40
/*(1 行受影响)
*/select * from [订购单]
/*
订单编号 金额
----------- -----------
1 12
2 40(2 行受影响)
*/用约束的方法
oh function ~~~~good idea~
create trigger triu_订购单
on 订购单
for insert,update
as
begin
declare @c numeric(18,4),@c1 numeric(18,4)
select @c=金额 from inserted
select @c1=sum(单价*数量) from 订单明细 m,inserted i where m.订单编号=i.订单编号
if @c<>@c1
rollback
end