Удалить с помощью оператора case в SQL Server 2008 - PullRequest
1 голос
/ 18 января 2011

Я хочу удалить строки на основе их идентификатора. Для нескольких таблиц я хочу сгенерировать один запрос, который примет имя таблицы и идентификатор и выполнит операцию.

Теперь сценарий таков, что я не хочу использовать оператор if - else. Я хочу использовать оператор case для определения имени таблицы, выполняющей функцию.

Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 18 января 2011

Как уже упоминал Мартин, вы не можете напрямую, но вы можете написать хранимую процедуру для выполнения удаления.

Сравнение

EXEC SLOW_DELETE 'TestTable', 1

с

DELETE FROM TestTable WHERE ID = 1

не большая разница, хотя (помимо потери производительности).

Хранимая процедура

CREATE PROCEDURE SLOW_DELETE(@TableName sysname, @ID INT) AS 
BEGIN

  IF ((SELECT COUNT(*) FROM sys.tables WHERE name=@TableName) <> 1)
  BEGIN
  RAISERROR('Ambiguous or non existent table name passed %s',16,1,@TableName)
  RETURN
  END

  DECLARE @Stmt nvarchar(500)
  SET @Stmt = 'DELETE FROM ' + QUOTENAME(@TableName) + ' WHERE ID = @ID'

  EXEC sp_executesql @Stmt, N'@ID INT', @ID = @ID
END

Интересно, что вы надеетесь получить от использования такогоподход.Возможно, если вы расширите свои мотивы, мы могли бы предложить альтернативный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...