2
USE master
GO

DECLARE @DbName nvarchar(MAX)
SET @DbName = N'DataBase'

ALTER DATABASE @DbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE @DbName SET OFFLINE WITH NO_WAIT
GO

ALTER DATABASE @DbName SET ONLINE
GO

ALTER DATABASE @DbName
SET MULTI_USER
GO

EXECを使用できることは知っていますが、少し醜いです。

4

4 に答える 4

5

変数からDB名を使用することはできません。

醜い場合でも、動的クエリを使用します。

于 2012-02-01T09:54:24.400 に答える
2

変数でデータベース名を使用することはできません。

いくつかのオプションがあります。

  • DBごとに異なるDMLスクリプト
  • 動的SQL
于 2012-02-01T09:32:23.700 に答える
0

まず、このようなDDLステートメントをパラメーター化することはできません。第二に、GOはバッチターミネータであり、この後はパラメータを使用できなくなります。

于 2012-02-01T09:31:45.840 に答える
0

MSSqlServerがOracleやMySQLと同じ柔軟性を可能にするかどうかは思い出せませんが、それらでは、接続ごとにデフォルトのデータベースを設定できます。クエリとステートメントでデータベース()が指定されていない場合use (dbname)は、デフォルトが使用されます。おそらくそれはあなたの目的にとって十分なパラメータ化ですか?

于 2012-02-01T09:55:31.547 に答える