SQLインスタンス内のすべてのデータベースで使用できる関数を作成する必要があります。 SQL Server 2008 R2のサーバーレベルでユーザー定義関数を追加できますか?SQL Server 2008 R2のサーバーレベルでユーザー定義関数を追加できますか?
答えて
「ツール」などと呼ばれる小さなデータベースを作成して、この種の機能を保存します。次に、それらを必要とする完全修飾名で参照してください:Tools.dbo.MyUDF
。
このようなものをMasterデータベースに格納することは避けてください。そのデータベースはSQL Serverに属しており、そのような目的では使用しないでください。
マスターデータベースに追加することでのみ可能です。プレフィックスをsp_
に付けると、マスターデータベース内で自動的に検索されます。さらに、関数の目的に応じて、システムオブジェクトとしてマークする必要があります。
これにより、どのDBでも使用できるようにUDFを「スコープ」するという問題は確実に解決されますが、他のDBに接続しているユーザーがそのUDFを実行するには、適切な権限を設定(維持)する必要があります。 –
そして、間違いなく、 'sp_'という接頭辞を持つUDFに名前をつけるのは間違いです! –
いいえ、特定のDBにUDFを作成する必要があります。
関連する実行ユーザーのSQL Serverログインに必要な権限があれば、任意のDBのUDFを他のDBで使用できます。そのようなUDFを別の意味のある名前のDBに作成する1つの理由は、他のユーザー、管理者、サポート技術者などのためにUDF(およびそのDBで作成する他のオブジェクト)の目的を明確に文書化することです。
これにmasterデータベースを使用しないのはなぜですか? –
@Martin:マイクロソフトは[ここ](http://msdn.microsoft.com/en-us/library/ms187837.aspx)に対してこれを推奨しており、これを避けることがベストプラクティスであることに同意します。 –
@Martin - 標準でないオブジェクトがマスタDBに存在するとは思っていませんが、これらのオブジェクトに標準オブジェクトと同様の名前が付けられていれば、どのオブジェクトがどのオブジェクトだったのかを簡単に知ることができません。 –