問題を遭遇しましたが、それを完了するための素晴らしい、安全な方法は考えられません。私は "Sql.Helper"クラス(Microsoft.ApplicationBlocks.Data)の周りにラッパークラスを持っており、どこでもパラメータを使用しています。私はC#TSQL + C#:使用中のデータベースを動的に変更する
USE @DBName
そのコードのために使用中の現在のDBを変更しようとしています
はparametarisedすることができないので、どこでも私が読んで実行していることを示唆しそう
などの動的SQL(身震い)DECLARE @SQL_SCRIPT NVARCHAR(100);
SET @SQL_SCRIPT = REPLACE('USE {DBName};', '{DBName}', @DBName);
exec sp_executesql @SQL_SCRIPT;
ただし、この "sp_executesql"の外部では、DBは変更されません。私はこれをすべてのSQL呼び出しの先頭に追加することを考えましたが、これは役に立たないでしょう。
これを実行している
は、プロファイラは、コードが最終的にように実行された私に語った:exec sp_executesql N'DECLARE @SQL_SCRIPT NVARCHAR(100); SET @SQL_SCRIPT = REPLACE(''USE {DBName};'', ''{DBName}'', @DBName); exec sp_executesql @SQL_SCRIPT;',N'@DBName nvarchar(100)',@DBName=N'MyDatabaseName'
それがデフォルト:(現在
によってさらに別の「EXEC sp_executesqlを」に含まれている、と私はこれを知っています最善の方法ではありませんが、私は、各呼び出しの開始時に次のことをやっている。
commandText = "USE " + this._currentDB + ";" + commandText;
誰もがこの解決のためにDBを選択する適切な方法を知っていますか?
p.s. this._currentDBはエスケープされたSQLです(可能な限り)
の新しいインスタンスを作成する前に、あなただけのCommandText内のテーブル参照でデータベース名を含めることはできませんなぜ
今すぐ新しいもののためにDB名を置き換え? SELECT * FROM Database..Table – adrianm