2011-07-09 6 views
2

環境内のexec:SQL Serverの2005/2008キルすべての動的SQLを使用してユーザーセッション - execの

私は、動的SQLを使用して、特定のDB上のすべてのユーザー接続を殺すしたいと思います。 DBモードをシングル/オフラインなどに変更するなど、動的SQLを使用したいと考えています。

私はカーソルを避けようとしていますが、whileループや動的SQLを実行する際の変数の使用方法もありません。ここに私のコードは、sysprocessesのを使用している:


-- Construct KILL SQL 
exec ('select ''kill '' + cast(spid as varchar(20)) + '';'' from sys.sysprocesses 
    where spid NOT IN (@@spid) 
    and spid > 50') 

今、私は宣言し、以下のように変数を使用せずにexecしたい個々のKillステートメントを構築した後。私は何かを見逃しているのですか、またはexecのexecがうまくいきませんか?


-- execute KILL SQL 
exec ('exec (''select ''''kill '''' + cast(spid as varchar(20)) + '''';'''' from sys.sysprocesses 
where spid NOT IN (@@spid) 
and spid > 50'')') 

私は変数を宣言するためのより良い方法を知っていて、以下のようにそれを行うが、それは、変数を使用せずに可能であるならば、私は仕事に上記たい:


-- routine way of doing KILL 
declare @dsql nvarchar(max)='' 
select @dsql = 'kill ' + cast(spid as varchar(20)) + ';' from sys.sysprocesses 
where spid NOT IN (@@spid) 
and spid > 50 
exec(@dsql) 

+1

なぜ変数がないように、非常に多くの制約がありますか? –

+0

なぜ簡単な解決策を避けたいですか?ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE; –

+0

@ Aaron ..私の元の質問だった - なぜ私はexecの中でexecを実行することができませんでしたか?上記の例は、そのアイデアのマイナーな実装でした...私はこの問題のために他のシンプルソウルに行くことに全く同意します...なぜ、2番目のクエリがうまくいかないのか教えてください。 – Ram

答えて

0

私はあなたのことをお勧めしたいです最後のバージョンが最適なソリューションです。

関連する問題