Wir haben das Problem, dass unsere SQL-Prozeduren auf ganz unterschiedlichen SQL-Servern laufen müssen. Und je nach Edition oder Windows-Version leicht anders reagieren soll. Um herauszufinden, ob das Skript auf einem 64-Bit- oder einem 32-Bit-SQL-Server läuft, kann man so vorgehen:

-- Laufe ich auf einem 64-Bit- oder 32-Bit-SQL-Server?
SELECT CASE WHEN @@version LIKE N'%(X64)%'
THEN '64-Bit'
ELSE '32-Bit'
END AS "SQL Server"

Ist es ein 32-Bit-SQL-Server, dann ist noch spannend, ob der unter 64-Bit (im Windows-on-Windows, WoW) oder unter 32-Bit-Windows ausgeführt wird. Wie das geht verriet mit mein Kollege Vladimir:

-- Laufe ich unter 64-Bit-Windows odr unter 32-Bit?
DECLARE @output TABLE (txt NVARCHAR(1000) NULL);

EXEC sp_configure 'show ad', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE WITH OVERRIDE;

INSERT INTO @output (txt)
EXEC xp_cmdshell 'systeminfo /FO LIST';

SELECT CASE WHEN EXISTS(SELECT *
FROM @output
WHERE txt LIKE 'Systemtyp: % X86-based PC'
OR txt LIKE 'System type: % X86-based PC')
THEN '32-Bit'
ELSE '64-Bit'
END AS "Windows"

EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show ad', 0;
RECONFIGURE WITH OVERRIDE;

Auf die Aussagen aus xp_msvers kann man sich nicht verlassen, weil der 32-Bit-SQL-Server immer denkt er liefe unter Windows-32 (auch wenn er in Wirklichkeit im WoW eines Win64 läuft)…
Kennt jemand einen besseren Trick?