Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
janus_007
Starting Member
2 Posts |
Posted - 2003-04-15 : 11:08:17
|
| Hello..Im having trouble to make a partitioned view when I use more than one column in check constraint!Should I use check constraint on all the primary keys? or is't possible to have 5 primary and check constraints on 2 of them ?I've read [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_06_17zr.asp?frame=true[/url]But i cannot see limitations on this??? |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2003-04-15 : 11:57:52
|
| Why not post your sql to show us what you're trying to do....Brett8-) |
 |
|
|
janus_007
Starting Member
2 Posts |
Posted - 2003-04-16 : 03:00:15
|
| Oh yes.. sorry :)CREATE TABLE Orders2000a( orderid int NOT NULL, customerid varchar(5) NOT NULL, orderdate datetime NOT NULL, ordername varchar(5) NOT NULL, CONSTRAINT PK_Orders2000a PRIMARY KEY(orderdate,orderid,ordername), CONSTRAINT UQ_Orders2000a_orderid UNIQUE(orderid), CONSTRAINT CHK_Orders2000a_orderdate CHECK(orderdate >= '20000101' AND orderdate < '20010101'),CONSTRAINT CHK_Orders2000a_ordername CHECK(ordername = 'a'))CREATE TABLE Orders2000b( orderid int NOT NULL, customerid varchar(5) NOT NULL, orderdate datetime NOT NULL, ordername varchar(5) NOT NULL, CONSTRAINT PK_Orders2000b PRIMARY KEY(orderdate,orderid,ordername), CONSTRAINT UQ_Orders2000b_orderid UNIQUE(orderid), CONSTRAINT CHK_Orders2000b_orderdate CHECK(orderdate >= '20000101' AND orderdate < '20010101'),CONSTRAINT CHK_Orders2000b_ordername CHECK(ordername = 'b'))CREATE TABLE Orders2001a( orderid int NOT NULL, customerid varchar(5) NOT NULL, orderdate datetime NOT NULL, ordername varchar(5) NOT NULL, CONSTRAINT PK_Orders2001a PRIMARY KEY(orderdate,orderid,ordername), CONSTRAINT UQ_Orders2001a_orderid UNIQUE(orderid), CONSTRAINT CHK_Orders2001a_orderdate CHECK(orderdate >= '20010101' AND orderdate < '20020101'),CONSTRAINT CHK_Orders2001a_ordername CHECK(ordername = 'a'))CREATE TABLE Orders2001b( orderid int NOT NULL, customerid varchar(5) NOT NULL, orderdate datetime NOT NULL, ordername varchar(5) NOT NULL, CONSTRAINT PK_Orders2001b PRIMARY KEY(orderdate,orderid,ordername), CONSTRAINT UQ_Orders2001b_orderid UNIQUE(orderid), CONSTRAINT CHK_Orders2001b_orderdate CHECK(orderdate >= '20010101' AND orderdate < '20020101'),CONSTRAINT CHK_Orders2001b_ordername CHECK(ordername = 'b'))GOCREATE VIEW OrdersASSELECT * FROM Orders2000a UNION ALLSELECT * FROM Orders2000bUNION ALLSELECT * FROM Orders2001aUNION ALL SELECT * FROM Orders2001bWhen I insert through the view i get an error.INSERT INTO orders(orderid,customerid,orderdate,ordername)VALUES(1,'aa','20000501','a')error:Server: Msg 4436, Level 16, State 12, Line 1UNION ALL view 'Orders' is not updatable because a partitioning column was not found. |
 |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2003-04-16 : 09:56:52
|
janus_007,It appears that you need to select only 1 column as your partitioning column, so I would imagine Year would be your best option. I had to comment out parts of the code before it would work. You should be able to cut and paste this to see it work.Good LuckUSE NorthwindGOCREATE TABLE Orders2000a ( orderid int NOT NULL , customerid varchar(5) NOT NULL , orderdate datetime NOT NULL , ordername varchar(5) NOT NULL PRIMARY KEY( orderdate , orderid , ordername ))GOALTER TABLE Orders2000a ADD CONSTRAINT CK_DT_Orders2000a CHECK ( orderdate >= '20000101' AND orderdate < '20010101')--ALTER TABLE Orders2000a ADD CONSTRAINT CK_NM_Orders2000a CHECK ( ordername = 'a')GO--CREATE TABLE Orders2000b ( -- orderid int NOT NULL -- , customerid varchar(5) NOT NULL -- , orderdate datetime NOT NULL -- , ordername varchar(5) NOT NULL --PRIMARY KEY( orderdate-- , orderid-- , ordername-- )--)--GO--ALTER TABLE Orders2000b ADD CONSTRAINT CK_DT_Orders2000b CHECK ( orderdate >= '20000101' AND orderdate < '20010101')--ALTER TABLE Orders2000b ADD CONSTRAINT CK_NM_Orders2000b CHECK ( ordername = 'b')--GOCREATE TABLE Orders2001a ( orderid int NOT NULL , customerid varchar(5) NOT NULL , orderdate datetime NOT NULL , ordername varchar(5) NOT NULL PRIMARY KEY( orderdate , orderid , ordername ))GOALTER TABLE Orders2001a ADD CONSTRAINT CK_DT_Orders2001a CHECK ( orderdate >= '20010101' AND orderdate < '20020101')--ALTER TABLE Orders2001a ADD CONSTRAINT CK_NM_Orders2001a CHECK ( ordername = 'a')GO--CREATE TABLE Orders2001b ( -- orderid int NOT NULL -- , customerid varchar(5) NOT NULL -- , orderdate datetime NOT NULL -- , ordername varchar(5) NOT NULL --PRIMARY KEY( orderdate-- , orderid-- , ordername-- )--)--GO--ALTER TABLE Orders2001b ADD CONSTRAINT CK_DT_Orders2001b CHECK ( orderdate >= '20010101' AND orderdate < '20020101')--ALTER TABLE Orders2001b ADD CONSTRAINT CK_NM_Orders2001b CHECK ( ordername = 'b')--GOSET XACT_ABORT ONGO CREATE VIEW Orders2k AS SELECT orderid, customerid, orderdate, ordername FROM Orders2000a UNION ALL-- SELECT orderid, customerid, orderdate, ordername FROM Orders2000b-- UNION ALL SELECT orderid, customerid, orderdate, ordername FROM Orders2001a-- UNION ALL-- SELECT orderid, customerid, orderdate, ordername FROM Orders2001bGOINSERT INTO orders2k (orderid,customerid,orderdate,ordername) VALUES(1,'aa','20000501','a') GOSELECT * FROM Orders2kGODROP TABLE Orders2000aGo--DROP TABLE Orders2000b--GoDROP TABLE Orders2001aGo--DROP TABLE Orders2001b--GODROP VIEW Orders2kGO Brett8-) |
 |
|
|
|
|
|
|
|