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
を実行する必要があります。つまり、私はスキーマを指定する必要があります。
私は、ストアドプロシージャの呼び出しでスキーマ名をハードコードすることによって、デフォルトのスキーマが存在することを確認しました。
"schema_idが有効なIDでない場合はNULLを返します。"今、私たちの誰かがあなたがその機能に有効なIDを提供しているかどうかを知ることができますか? –
タブ - マイケルはパラメータなしの関数を使用していると思います。私はちょうどそれを試み、結果として 'dbo'を得る。申し訳ありませんマイケル、私はここに何ができるのかについての最初の考えがありません! – Brett
"schema_idが定義されていない場合、SCHEMA_NAMEは呼び出し元のデフォルトスキーマの名前を返します。ログインに有効なデフォルトのスキーマが設定されていますか? –