all groups > sql server (alternate) > february 2007 >
You're in the

sql server (alternate)

group:

Partition Scheme using a function


Partition Scheme using a function eavery NO[at]SPAM cdc.gov
2/20/2007 11:09:40 AM
sql server (alternate):
I can't seem to find a way to do the following:

create table part_table (
col1 int,
col2 datetime
) on psX (datename(week,col2))

I want to partition based on the week number of a date field.

So if I enter in data like the following in my part_table:

(1, 1/1/2007) should go into partition 1 for week #1
(52, 12/21/2007) should go into partition 52 for week #52 of the year

I tried adding in a computed column, but it says its nondeterministic.
Re: Partition Scheme using a function Erland Sommarskog
2/20/2007 10:47:18 PM
(eavery@cdc.gov) writes:
[quoted text, click to view]

You are out of luck, I'm afraid. datename() is listed as entirely
undeterministic in Books Online. The normal choice would be datepart(),
which Books Online says is deterministic - with two exceptions of one
being the week number. This example shows why:

set datefirst 7
go
select datepart(week, '20070218') -- 8
go
set datefirst 1
go
select datepart(week, '20070218') -- 7
go


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
Re: Partition Scheme using a function eavery NO[at]SPAM cdc.gov
2/26/2007 10:44:08 AM
Ok, so I tried this:

create table part_table (
col1 int,
col2 datetime
) on psX ((datepart(dayofyear,col2)/7)+1)

and I got "Incorrect syntax near '('. "

select ((datepart(dayofyear,getdate())/7)+1) will give me the correct
week of the year that I want. (first week starts on the first day of
the year this way)




Re: Partition Scheme using a function Erland Sommarskog
2/26/2007 10:17:26 PM
(eavery@cdc.gov) writes:
[quoted text, click to view]

Here is something that completes without errors. I canoot vouch for
that it make much sense, though. I have not looked very much into
partitioned tables myself.


CREATE PARTITION FUNCTION partfun(int) AS
RANGE FOR VALUES ()
go
CREATE PARTITION SCHEME psX AS PARTITION partfun TO ([PRIMARY])
go
create table part_table (
col1 int NOT NULL,
col2 datetime NOT NULL,
weekno AS datepart(dayofyear, col2) / 7 + 1 PERSISTED,
PRIMARY KEY(weekno, col1)
) on psX (weekno)
go
drop table part_table
drop partition scheme psX
go
drop partition function partfun




--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
Re: Partition Scheme using a function eavery NO[at]SPAM cdc.gov
2/27/2007 10:07:48 AM
Yep - that's exactly what I ended up doing....shame to have to add an
extra column (overhead) to the table to do something which should be
so straightforward.
Thanks for your time!

AddThis Social Bookmark Button