Nob*_*bot 3 check-constraints sql-server-2008
拜托,我刚刚开始学习SQL并陷入困境.我正在尝试为我的测试项目构建一个数据库,我创建了一些表,做了关系,定义了主键和外键.....所有这一切都在SQL Server 2008中通过Visual界面(表设计/编辑) ,没有声明编码(没有到达那里,但我会:)).
我Tax在一个表中有一个列,Orders我做了我的功课,发现最好使用decimal带CHECK约束的数据类型(我用十进制(5,2)).
所以我右键单击了列 - >约束,并在我输入的表达式中
([TAX] >= (0.00) AND [TAX] <= (100.00))
Run Code Online (Sandbox Code Playgroud)
我的值超过了检查约束,我可以输入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
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 10
检查约束只是工作 - 试试这个:
CREATE TABLE Orders (OrderID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
TotalAmount DECIMAL(18,2),
Tax DECIMAL(5,2) CHECK (Tax >= 0.0 AND Tax <= 100.0)
)
Run Code Online (Sandbox Code Playgroud)
现在,当您尝试插入数据时:
INSERT INTO dbo.Orders(TotalAmount, Tax)
VALUES (100.0, 2.75) --> works just fine
INSERT INTO dbo.Orders(TotalAmount, Tax)
VALUES (200.0, 15.75) --> works just fine
INSERT INTO dbo.Orders(TotalAmount, Tax)
VALUES (300.0, -2.0)
Run Code Online (Sandbox Code Playgroud)
消息547,级别16,状态0,行1
INSERT语句与CHECK约束"CK__Orders__Tax__164452B1"冲突.冲突发生在数据库"test",表"dbo.Orders",列"Tax"中.
INSERT INTO dbo.Orders(TotalAmount, Tax)
VALUES (400.0, 200.75)
Run Code Online (Sandbox Code Playgroud)
消息547,级别16,状态0,行1
INSERT语句与CHECK约束"CK__Orders__Tax__164452B1"冲突.冲突发生在数据库"test",表"dbo.Orders",列"Tax"中.
所以我会说-是检查约束IS的工作就好了... ...
更新:
如果你坚持这么做 - 使用(相当蹩脚的)可视化设计师 - 那么你需要在这里定义检查约束:

一旦我这样做,然后我进入Edit top 200 rowsSQL Server Management Studio输入数据,然后输入违反检查约束的内容,我得到:

如果这对您的客户端应用程序不起作用 - 那么您很可能遇到客户端应用程序的问题- 而不是CHECKSQL Server中的约束!
| 归档时间: |
|
| 查看次数: |
19596 次 |
| 最近记录: |