動的 SQL はそのようには機能しません。
オブジェクト名の代わりに使用される動的文字列にパラメーターを渡すことはまだできません。
@DBName
を手動で置き換えて、クエリ文字列を自分で作成する必要があります 実際の値で。ただし、引用符なしで式の右側にパラメーターを使用できます。
また、オブジェクト名をクエリに入れるときは、常に QUOTENAME
関数。名前を正しくエスケープするため、SQL インジェクションや、オブジェクト名の特定の文字によって引き起こされる望ましくない動作はありません。
SET @sql = N' IF EXISTS (SELECT NAME FROM master.sys.databases sd where name = @DBName) BEGIN ALTER DATABASE ' + quotename(@DBName, '[') + N' SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE ALTER DATABASE ' + quotename(@DBName, '[') + N' SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE ' + quotename(@DBName, '[') + N' END';
プレ>