SQL Server 2008 November CTP came out this week. This CTP
finally contains many major features that are worth playing with. However,
there are things that are no longer in SQL Server, things that I will be
missing (and many things that I’ll be happy to see go).
One of my favourite system functions is powersum. This is
not documented, so Microsoft cannot be blamed at all for removing it (Well, not
really removing it, but just denying public access to it. It is very useful, so
Microsoft keep using it internally). However, I liked using this on 2005 to create
bit arrays from numbers. Powersum is an aggregate. It takes numbers, and it
returns a varbinary. It takes its input number, and SHIFTs 1 to the left by
this number, then ORs this with the aggregated value.
For example the following query returns 0x16:
SELECT
powersum(col)
FROM
( SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 4
) AS data ( col )
0x16’s binary representation is 10110 (so the bits at
position 1, 2 and 4 are set).
I’m really sorry to see this function go. I used it when
returning column permissions in SQL Compare. It allowed me to group column
permissions together, consequently my queries were sending less data. It also
allowed building query results in 2005 that were similar to SQL Server 2000’s syspermissions
table.
However, the access restriction to this useful function
reminds me that while there are new features in SQL Server 2008, some obsolete
features and syntax will go away, just like it has happened with SQL Server
2005. I’ve seen many people finally migrating to the “new” join syntax, and abandoning
the =* syntax in 2005. Since SQL Server 2008 does not support compatibility
level 70 and before, this syntax will finally die out.
2008 also seems to remove the DUMP and LOAD keywords. People
should use BACKUP and RESTORE instead, and it is a good time to look at all
those old maintenance jobs.
Books online mentions a few other changes that we should
expect in SQL Server 2008. (The page is Deprecated
Database Engine Features in SQL Server 2005). However this list is likely
to change. For example this page claims that SETUSER will be removed from 2008,
but it still seems to work (let’s not forget though that SQL Server 2008 is not
yet released). It is worth however to keep a close eye on this page as well as
the "Discontinued Database Engine Functionality in SQL Server 2008"
page in 2008’s Books online.