4

変数からデータベースを選択する方法はありますか?

Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
4

3 に答える 3

10

残念だけど違う。

残りのバッチを動的 SQL として実行できない場合を除きます。

を使用executeして SQL を動的に実行すると、executeステートメントのスコープのコンテキストが変更されますが、ステートメントを実行するスコープに永続的な影響は残りませんexecute

言い換えれば、これは:

DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)

現在のデータベースを永続的に設定するわけではありませんが、上記のコードを次のように変更した場合:

DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects

内部で実行された最初の選択はSweetDBで実行されているが、2番目はそうではないため、これら2つのクエリの結果は異なります(まだSweetDBにいないと仮定します)execute

于 2009-06-01T23:36:24.030 に答える
0
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
于 2009-06-01T23:23:53.260 に答える
0

#TempTables は GO 間で保持されます

最初のバッチでテーブルを作成し、そのバッチまたは後続のバッチで必要に応じてデータを挿入/選択できます。

構文の例を次に示します。

CREATE TABLE #YourTableName
(
     col1   int         not null   primary key   identity(1,1)
    ,col2   varchar(10)
)
于 2009-06-02T13:02:15.750 に答える