請剛剛開始學習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