请刚刚开始学习SQL并陷入困境。我试图为我的测试项目创建一个数据库,我创建了一些表,创建了关系,定义了主键和外键......所有这些都在SQL Server 2008中通过可视化界面(表格设计/编辑) ,没有声明编码(还没有到达,但我会:))。在SQL Server 2008中检查约束条件
我有一个表中的列Tax
称为Orders
和我做功课,发现它是最好使用decimal
数据类型(我用十进制(5,2))与CHECK
约束。
所以我右单击的列 - >限制和表达我输入
([TAX] >= (0.00) AND [TAX] <= (100.00))
我值超过检查约束,我可以输入123456.0999和我1234560999的表,如果键入2.5我得到25 .....所以CHECK CONSTRAINT不工作,它应该是什么?
请帮
编辑:这里是创建脚本把我的表
USE [MyCompany]
GO
/****** Object: Table [dbo].[Orders] Script Date: 03/22/2013 11:33:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Orders](
[OrderID] [int] IDENTITY(1,1) NOT NULL,
[OrderDateTime] [smalldatetime] NOT NULL,
[CustomerID] [int] NOT NULL,
[Tax] [decimal](5, 2) NULL,
[Shipping] [decimal](7, 3) NOT NULL,
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED
(
[OrderID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([CustomerID])
REFERENCES [dbo].[Customers] ([CustomerID])
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers]
GO
ALTER TABLE [dbo].[Orders] WITH CHECK ADD CONSTRAINT [CK_Orders_Tax] CHECK (([Tax]>=(0.0) AND [Tax]<=(100.0)))
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [CK_Orders_Tax]
GO
对不起,我还没有那么熟练,知道把代码准确地放在哪里,但是当我将CONSTRAINT更改为**([Tax]> =(0.0)AND [Tax] <=(100.0))**我得到>将数值转换为数据类型数值的算术溢出错误。这是新的.... :) – Nobot 2013-03-21 13:05:12
当我输入5.25或2.1或0.12它重置为525,21,12,并给出了该错误,我正在通过接口(设计/编辑),每次更改后保存。 ... :) – Nobot 2013-03-21 13:07:54
对于所有人,特别是Marc_s,BIG感谢您对(我同意)CRAPPY WAY的描述,但我到了那里。我得到了像你一样定义的税务专栏,但没有发生任何重大事件。然后,我放弃了桌子,取消了所有关系,并按照您所描述的方式重新配对。现在,当我输入100.0以上时,我也会得到与CHECK约束条件冲突的错误_INSERT语句,但是当我输入2.5或17.8时,它只会将其舍入到25或178(当然有错误)。来自脚本的代码将在一个答案中跟随! – Nobot 2013-03-22 10:32:04