Příkaz EXECUTE má prostě jinou gramatiku než ostatní příkazy jako SELECT a SET. Podívejte se například na sekci syntaxe v horní části následujících dvou stránek.
EXECUTE příkaz:http://msdn.microsoft.com/en-us/ library/ms188332.aspx
Příkaz SET:http://msdn.microsoft.com/en-us/ library/ms189484.aspx
Syntaxe pro EXECUTE přijímá pouze hodnotu
Zatímco syntaxe SET přijímá výraz
Hodnota je v podstatě jen pevně zakódovaná konstanta, ale bude vyhodnocen výraz. Je to jako mít varchar 'SELECT 1 + 1'. Právě teď je to jen varchar hodnota. Můžete však hodnotit řetězec takto:
EXEC('SELECT 1 + 1')
Předpokládám, že vše, na co poukazuji, je to, že příkaz EXEC neumožňuje výrazy podle definice, což jste zřejmě již zjistili. Nevím, jaký byl záměr vývojářů T-SQL, kde, když to tak udělali. Předpokládám, že gramatika by se prostě vymkla z rukou, pokud byste mohli házet poddotazy v rámci poddotazů v seznamu parametrů uložené procedury.
T-SQL Expression:http://msdn.microsoft.com/en- us/library/ms190286.aspx