Удаление таблиц с использованием динамического SQL - PullRequest
4 голосов
/ 11 мая 2011

У меня проблемы с моей SQL хранимой процедурой, в частности, я передаю VARCHAR() как имя таблицы, используя ее.

Мой код (не работает):

CREATE PROCEDURE DeleteUser 

 @Username VARCHAR(50)

    AS
    BEGIN

    --DROP THE SURF TABLE
    IF EXISTS (SELECT 1 
      FROM sysobjects 
      WHERE xtype='u' AND name=@Username + '_table') 
          DROP TABLE @Username + '_table'  

 END
GO

Однако при выполнении он выдает ошибки в строке DROP TABLE @Username + '_table'.

Что я мог делать неправильно?

Я использую MS SQL Server 2008, если это имеет значение, вызывается из C #.

1 Ответ

10 голосов
/ 11 мая 2011

Оператор DROP TABLE не может быть параметризован при попытке. Вам нужен динамический SQL.

DECLARE @DynSql nvarchar(max) = 'DROP TABLE ' + QUOTENAME(@Username + '_table');
EXEC(@DynSql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...