Среда: SQL Server 2005/2008
Я хотел бы уничтожить все пользовательские соединения в конкретной БД с помощью динамического SQL. Я знаю о других методах, таких как изменение режима БД на одиночный / автономный и т. Д., Но хотел бы использовать динамический SQL.
Я пытаюсь избежать курсора, цикла, а также любого использования переменной при выполнении динамического SQL. Вот мой код с использованием sysprocesses:
-- Construct KILL SQL
exec ('select ''kill '' + cast(spid as varchar(20)) + '';'' from sys.sysprocesses
where spid NOT IN (@@spid)
and spid > 50')
После создания отдельных операторов 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)