Instrukcja EXECUTE ma po prostu inną gramatykę niż inne instrukcje, takie jak SELECT i SET. Na przykład spójrz na sekcję składni na górze kolejnych dwóch stron.
Instrukcja EXECUTE:http://msdn.microsoft.com/en-us/ biblioteka/ms188332.aspx
Instrukcja SET:http://msdn.microsoft.com/en-us/ biblioteka/ms189484.aspx
Składnia EXECUTE akceptuje tylko wartość
Podczas gdy składnia SET akceptuje wyrażenie
Wartość jest po prostu stałą zakodowaną na stałe, ale wyrażenie zostanie ocenione. To tak, jakby mieć varchar „SELECT 1 + 1”. W tej chwili to tylko wartość varchar. Możesz jednak ocenić ciąg w ten sposób:
EXEC('SELECT 1 + 1')
Przypuszczam, że wszystko, na co zwracam uwagę, to to, że polecenie EXEC nie zezwala na wyrażenia z definicji, o czym już się widocznie dowiedziałeś. Nie wiem, jakie były intencje twórców T-SQL, kiedy zrobili to w ten sposób. Przypuszczam, że gramatyka wymknęłaby się spod kontroli, gdybyś mógł rzucać podzapytania w podzapytaniach na liście parametrów procedury składowanej.
Wyrażenie T-SQL:http://msdn.microsoft.com/en- us/library/ms190286.aspx