Given an instance of SQL Server, imagine there's a table named
Configuration, which has three columns:
Data. There should be no duplicate rows for
Now imagine that you want to select the data stored for a particular configuration, but if that configuration doesn't have a row in the table, then you just want to select a default value instead.
This, then, is what I have been using:
SELECT CASE WHEN EXISTS(SELECT 1 FROM Configuration WHERE Name = 'NameOfConfiguration') THEN (SELECT Data FROM Configuration WHERE Name = 'NameOfConfiguration') ELSE 'Default Value' END
But that looks bad, so I was trying to think of a way to shorten the
EXISTS() call, make the code a little clearer, get rid of duplicate code, and possibly even speed it up, and this is what I've been able to find so far:
SELECT CASE WHEN COUNT(1) > 0 THEN MIN(Data) ELSE 'Default Value' END FROM Configuration WHERE Name = 'NameOfConfiguration'
Is this latter code snippet the right way to go about this sort of thing in general? Unfortunately, SQL Server requires an aggregate function call or
GROUP BY clause to be applied to the latter, and
FIRST() evidently doesn't exist in SQL Server. I am not restricting this call to
MIN() to any sort of datatype whatsoever. Is there a better way to write this?