MS SQL Server 2008-MySQLからの移行における混乱re:“ select XYZ from TABLE”
-
03-07-2019 - |
質問
ここで混乱しているだけです。
MySQLからMS SQL Server 2008にデータベースを移行する必要があります。「MS SQL Data Wizard」を使用してデータを転送しました。 SQL Maestrosのアプリ。 MySQLデータベース「gk」からデータ+構造を取りました。それをデータベース" gk"にコピーしましたMS SQL Expressインスタンスで。
しかし、MS SQLインスタンスに接続してSQLクエリを実行しようとすると、" select * from gk.TABLENAME
"を実行したときにのみ結果が得られます。または" select * from gk.gk.TABLENAME
" ...を実行すると、" select * from TABLENAME
" " use gk
"を実行すると、次のようになります:
エラー:オブジェクト名「TABLENAME」が無効です
SQLState:S0002
エラーコード:208
この動作を「通常」にするにはどうすればよいですか?つまり、特定のデータベースに接続するので、どのデータベース/スキーマでテーブルを見つけるかを明示的に指定する必要はありませんか?
更新: SQL Data Wizardアプリによって作成された構造を指定する必要があります。 SQL Server Management Studioのオブジェクトブラウザツリーを見ると、次のことがわかります。
[HOSTNAME]\SQLEXPRESS (SQL Server ...)
|-- Databases
|-- System Databases
|-- gk
|...
|-- Tables
|-- TABLE1
|-- TABLE2
|-- TABLE3
...など。
ありがとう。 -ダン
解決
ユーザーの[ログインプロパティ]ダイアログには、[ユーザーマッピング]があります。ユーザーのデフォルトスキーマを設定できるページ。 「gk」に設定します; (" gk"データベース内)を使用すると、テーブルを完全に修飾せずにクエリを記述できます。
他のヒント
まだ試していない場合は、これを試してください:
USE gk
GO
SELECT * FROM tablename
ウィザードが" gk"というデータベースを作成し、" gk"というタイトルのスキーマにすべてのテーブルを配置するように見えます。
テーブルが名前付きスキーマ(つまり、" dbo"のデフォルトスキーマ以外のもの)に存在する場合、クエリを実行するときは常にスキーマを指定する必要があります。
注: 状況によっては、スキーマ/所有者を明示的に指定しないと、パフォーマンスが大幅に低下します。 SQLの古いバージョンでより重要ですが、まだあります。アプリケーションで問題になるほど大きな違いではないかもしれませんが、まだ知っておく価値があります: