Book prices

Tuesday, 6 May 2008

I recently ordered MCPD Self-Paced Training Kit (Exam 70-547): Designing and Developing Web-Based Applications Using the Microsoft .NET Framework from Amazon and it cost me about $AU 60 (including postage).

MS Press have just launched their Australian web site, and the same book is listed as $AU 120. Dave Glover mentions that user group members can get a 50% discount, but only for this month. So for this month at least they are comparable.

It isn't just MS Press though. I've seen other Australian booksellers listing this same title at equally uncompetitive prices. About the only reason you'd buy local is if you didn't want to wait a couple of weeks for Amazon's standard delivery to arrive.

Certainly, the Australian dollar is very high at the moment, so that helps with the exchange rate, but I still don't get why there's such a huge price difference.

Ready, Steady, Code

Monday, 5 May 2008

Once or twice while I was on leave recently, I happened to have the TV on during the daytime. One of the programs that was on was Ready, Steady, Cook (originally a BBC show apparently).

The basic format of the show is as follows:

So what I was thinking was whether you could adapt this format to a user group setting?

Have two teams (ideally with two data projectors so the audience can see what they're doing), and give each of them 3-4 random technologies and they have to come up with an application that uses all of them in a fixed time period.

At the conclusion the audience can vote on which they think is the best.

You might need a little more time, and the audience could get involved shouting out suggestions if they get stuck.

Ordering data using dynamic SQL versus temporary tables

Thursday, 1 May 2008

Here's a scenario that's not that uncommon:

You have a query and the user wants to be able to choose at run-time which column to sort/group by.

The problem is you can't use a variable to indicate the column name in the ORDER BY or GROUP BY clauses.

If the query itself is very simple, then you could just repeat the query with specified ordering using IF. eg.

IF (@order = 'Column1')
SELECT * from Table1 ORDER BY Column1
ELSE IF (@order = 'Column2')
SELECT * from Table1 ORDER BY Column2

If the query is non-trivial, you probably wouldn't want to use this however, as maintenance becomes problematic.

There are two obvious solutions to this:

Dynamic SQL

Assemble the query into a varchar variable and then execute it using sp_executesql.

DECLARE @sql varchar(4000)

SET @sql = 'SELECT * FROM Table1'

IF (@order = 'Column1')

	SET @sql = @sql + ' ORDER BY Column1'

ELSE IF (@order = 'Column2')

	SET @sql = @sql + ' ORDER BY Column2'

sp_executesql @sql

Temporary Tables

Split the query into two parts. First of all, retrieve the data into a temporary table (this is one of the few times you can't use a table variable). Next, use the original IF .. ELSE IF method to return the data from the temporary table.

SELECT * INTO #Stuff FROM Table1

IF (@order = 'Column1')
	SELECT * FROM #Stuff ORDER BY Column1
ELSE IF (@order = 'Column2')
	SELECT * FROM #Stuff ORDER BY Column2

So which is better? Great question, and I'm not really sure of the answer. I suspect it could well be "it depends".

Copy Full Path for Windows XP

Wednesday, 30 April 2008

I'm missing the "Copy Full Path" feature from Windows Explorer in Vista now that I'm back in WinXP land. And that's where Copy Path to Clipboard comes into play.

DECS, Day 1

Tuesday, 29 April 2008

Yesterday was my final day at UniSA - spent out at Mawson Lakes doing handover with Damien, Brad and Richard. I also caught up with Brook, who's a bit of a shibboleth expert amongst other things.

Today was my first day at the Department of Education and Children's Services (or DECS for short). I guess it's pretty normal to make comparisons, but here's what I've noticed so far:

So it was a pretty full on day. Certainly a huge change from what I was used to, but I think it's going to work out ok. And as I said before, the people seem really nice, which helps a lot too.