Moreover, a simple SELECT into a variable without a table is optimized as equivalent to a SET, so in the following example, only the third variation returns the expected NULL:
DECLARE @SetOpt INT, @SelOpt INT, @SetSelOpt INT
Set FMTONLY ON;
SET @SetOpt = @@OPTIONS
SELECT @SelOpt = @@OPTIONS
SET @SetSelOpt = (SELECT @@OPTIONS)
Set FMTONLY OFF;
SELECT @SetOpt AS SetOpt, @SelOpt AS SelOpt, @SetSelOpt AS SetSelOpt
Therefore, for maximum readability and predictability, I now use @t.ovod-everett simple suggestion:
DECLARE @NullIfFmtOnly INT = (SELECT 1);
or if you need it to work in 2005 and earlier:
DECLARE @NullIfFmtOnly INT SET @NullIfFmtOnly = (SELECT 1)