1

T-SQLで次のことをしたい:

EXEC('... ' + (SELECT ...))

簡単な具体例は

EXEC('DROP TABLE ' + (SELECT name FROM sys.tables WHERE ...))

(明らかに、WHERE 句は、サブクエリが常に正確に 1 つの値を返すように選択されています。)これを試みると、エラーが発生します。

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '('.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.

変数を使用してこれを回避できることはわかっています。たとえば、次のようになります。

DECLARE @sql varchar(MAX)
SELECT @sql = 'DROP TABLE ' + name FROM sys.tables WHERE ...
EXEC(@sql)

しかし、さまざまな理由から、私は 1 つのステートメントだけを持ちたいと思います。それは可能ですか?


PS: 関連する場合、それは私が 1 つのステートメントに絞り込もうとしている動的 SQL コードです。

4

1 に答える 1

1

EXEC 関数に渡す値を処理することはできません。

したがって、呼び出しの前に行われるように、値を連結したり、他の方法で変換したりすることはできません。

したがって、答えは、いいえ、できません。

しかし、Pondlife が言ったように、なぜこのようにしたいのか理由を言えば、より満足のいく答えを見つけることができます。

于 2012-10-24T14:33:56.353 に答える