2011-07-21 12 views
1

私は異なるスキーマを指定しても、デフォルトのスキーマdboでテーブルが作成されるのはなぜですか?

CREATE TABLE xxx.MyTable 

のようにSQL Server 2005のSSMS(バージョン9.00.4035.00)でSQLスクリプトを実行する場合は、スキーマxxxは存在しないものの、テーブルがdbo.MyTableとして作成されます!エラーメッセージは表示されません。

私は

何が問題になっています(サーバーの役割のシステム管理者を持つWindowsユーザーとSQLユーザーでテスト済み)すべての権限としてスクリプトを実行するために使用しているユーザー? )

1テーブルやその他のオブジェクトを作成する必要がデータベースへのDBO権限を持つSQLログインを作成します。

+0

をチェックしますSCHEMA_ID( 'dbo')、SCHEMA_ID( 'xxx') 'を選択しますか? 2つの異なる数字、同じ数字、1つまたは両方のためのヌルを与えますか? –

+0

それは異なった数を与える。 xxxスキーマは完全にokです。私はdboテーブルを作成してxxxに変更することもできます。しかし、私はそれを直接作成することはできません! –

+0

私が発見した別のこと。 dbo.MyTableが(xxx.MyTableの代わりに)作成されたときに、同じことをもう一度やり直すと、xxx.MyTableは既に存在するので作成できないというエラーメッセージが表示されます。 –

答えて

-1

可能な回避策をご覧ください。ユーザーが作成したSQLログインを使用してSSMSに接続させます。 SSMSを使用して問題なくテーブルを作成できます。

2)WindowsセキュリティグループのユーザーにTSQLを使用してテーブルを作成させる。このデータベースの新しいスキーマとユーザーがユーザーのユーザー名で作成されることがわかります。表は、所有者としてWindowsユーザー名で作成されます。 作成したデータベースユーザーに移動します。デフォルトのスキーマをxxxに変更します。 セキュリティグループのユーザーは、SSMS内でテーブルを作成し、オブジェクト所有者としてdboを使用することができます。

明らかに、これはマイクロソフトのバグであり、まだ解決されていません。

https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=238246&wa=wsignin1.0&siteid=68

は、この情報がお役に立てば幸いです。

+0

まず、Windowsユーザーを使用しました。今、私は新しいSQLユーザーとサーバーの役割 'sysadmin'をテストしました。実際には何かする権利がありますか?しかし、まだ与えられたスキーマで作成することはできません! –

+0

これは質問とは無関係です。この記事は、「Windowsプリンシパルのデフォルトスキーマはありません」に関するものです。問題は "なぜ私のテーブルはdboスキーマに終わるのですか" – gbn

1

あなたはおそらく確認するには、今

  • 2つのテーブルxxx.MyTable
  • dbo.MyTable

を持っている:

SELECT SCHEMA_NAME(schema_id), name, create_date, modify_date 
FROM sys.objects 
WHERE name = 'MyTable' 

をSSMSオブジェクトエクスプローラに依存しないでください。リフレッシュする必要があります(テーブルノードを右クリックして、リフレッシュしてください)。

または間違ったデータベース、間違ったサーバーなど

私たちは、スキーマを使用してが問題

は編集がなかった:今、あなたは `を実行した場合、あなたは何を得るのですすべてのデータベース

EXEC sp_msforeachdb ' 
    USE ? 
    SELECT SCHEMA_NAME(schema_id), name, create_date, modify_date 
    FROM sys.objects 
    WHERE name = ''MyTable'' 
' 
+0

いいえ、間違ったxxx.MyTable(selectステートメントでチェックされています)だけです。 –

+0

@räph: "または間違ったデータベース、間違ったサーバーなど"。 CREATE TABLE xxx.myTableはxxxスキーマ内にテーブルを作成します:no ifs、no buts、it * will * – gbn

+0

間違ったサーバまたは間違ったdbはできません - テーブルが作成され、正しいdbで見ることができますが、間違ったスキーマで! –

関連する問題