関数にアクセスするためにdbo.
接頭辞が不要になるように、単純なシステム関数を記述しようとしています。 SQL Server 2000の例を見つけましたが、実行すると
EXEC SP_CONFIGURE 'ALLOW UPDATES', 1
RECONFIGURE WITH OVERRIDE
go
create function system_function_schema.trim
(@input varchar(max))
returns varchar(max)
as
begin
declare @result varchar(max)
select @result = rtrim(ltrim(@input))
return @result
end
go
EXEC SP_CONFIGURE 'ALLOW UPDATES', 0
RECONFIGURE WITH OVERRIDE
これはスローされたエラーです。
指定されたスキーマ名 "system_function_schema"は存在しないか、それを使用する権限がありません。重大度16
予想される使用法は
select trim(' padded value ')
誰かが私が取るべきアプローチを知っていますか、それともdbo.
のように呼び出さなければならない通常のユーザー定義関数として作成する必要があるかどうか:
select dbo.trim(' padded value ')
System_function_schemaの使用は、SQL 2000では文書化されておらず、サポートされていませんでした。SQL2005以降、この処理はできなくなりました。
仕様上、UDFでは、スキーマを関数呼び出しに含める必要があります。
例外が1つあります。プロシージャのように関数を呼び出す場合、実際にはスキーマは必要ありませんが、関数にとってはそれほど役に立ちません。
exec trim @input = ' foo '
さらに、スカラー関数を使用してクエリを慎重にテストしてください。これらはパフォーマンスに大きな影響を与える可能性があります。
関数の場合は注意が必要です。おそらく関数を作成してから、Modelでそのシノニムを作成できます(Modelオブジェクトを継承するために作成される新しいデータベースに関数が必要な場合)。
マスターデータベースに関数を作成します。
注:最初にsystem_function_schema
スキーマを作成する必要があります。
use master
go
create function system_function_schema.trim
(@input varchar(max))
returns varchar(max)
as
begin
declare @result varchar(max)
select @result = rtrim(ltrim(@input))
return @result
end
go
次に、関数を参照するSYNONYM
を作成します(既存のデータベースの場合、既存のデータベースに作成する必要があります)。
USE model;
GO
CREATE SYNONYM dbo.trim FOR master.system_function_schema.trim;
これで、任意のデータベースで2部構成の名前でオブジェクトを参照できますが、コードのコピーを1つ保存するだけで済みます。