2017-08-17 14 views
2

T-SQLスクリプトでSCHEMA_NAME()関数を使用しています。SCHEMA_NAME()がNULLを返します。

私にとってはNULLが返されますが、同僚のデフォルトスキーマは返されます。

1もSCHEMA_NAME()関数の引数を供給するときSCHEMA_NAME()のドキュメントが唯一の可能な値としてNULLを示しています。ここで

SCHEMA_NAME()のドキュメントです: https://docs.microsoft.com/en-us/sql/t-sql/functions/schema-name-transact-sql

この問題をデバッグするとき、私は何を見てする必要がありますか?

DBAは、私の同僚と自分の権限が同じであることを確認しました。

私は引数なしで関数を呼び出していますので、NULLを返すような文書が記載されている場合は、schema_idが無効な場合は、少なくとも明示的には適用されません。

DBAは、私はデフォルトのスキーマを持って確認し、私はデフォルトのスキーマを持って確認するために、次の選択を使用:

select * from sys.database_principles dp where dp.name = USER_NAME(); 

DBAがあった場合にそれを戻す、その後、他の何かに私のデフォルトのスキーマを変更バックグラウンドで何かが設定されています。

これはSQL Studioで、sqlcmdを使用してコマンドラインを実行したときに発生します。

CREATE PROCEDURE myprocを実行すると、デフォルトのスキーマでプロシージャが作成されますが、execute myprocを実行すると、execute myschema.myprocを実行する必要があります。つまり、私はスキーマを指定する必要があります。

私は、ストアドプロシージャの呼び出しでスキーマ名をハードコードすることによって、デフォルトのスキーマが存在することを確認しました。

+0

"schema_idが有効なIDでない場合はNULLを返します。"今、私たちの誰かがあなたがその機能に有効なIDを提供しているかどうかを知ることができますか? –

+0

タブ - マイケルはパラメータなしの関数を使用していると思います。私はちょうどそれを試み、結果として 'dbo'を得る。申し訳ありませんマイケル、私はここに何ができるのかについての最初の考えがありません! – Brett

+2

"schema_idが定義されていない場合、SCHEMA_NAMEは呼び出し元のデフォルトスキーマの名前を返します。ログインに有効なデフォルトのスキーマが設定されていますか? –

答えて

0

セキュリティ>ログインであなたのログインを右クリックし、「ユーザーマッピング」をクリックして、あなたがいるデータベースのデフォルトスキーマを確認してください。次に、同僚のログインに対して同じ操作を行います。

関連する問題