【SQL Server】ユーザー定義関数ではエラー処理(Try~Catch)は出来ない

説明

Oracleでは関数でエラー処理(Try~Catch)が可能だが、SQL Server不可。


https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-ver15

SQL Serverのユーザー定義関数でエラー処理(Try~Catch)を試みると…

「副作用のある演算子’TRY CATCH’を~」というコンパイルエラーが起きる。

備考

文字列型→DATETIME型に変換したい等の場合は、TRY_CONVERTを使用すればエラー処理と同等のことが出来る。

CREATE FUNCTION TestFunction
(
	@str varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
	
	DECLARE
		@Date DATETIME

	--問題無く文字列→日付型に変換できたら変換後の日付が設定される
	--変換できなかった場合はNULLが設定される(エラーで処理が止まったりしない)
	SET @Date = TRY_CONVERT(DATETIME,@str)
	--NULLかどうかをチェック
	IF @Date IS NULL
		BEGIN
			RETURN '日付に変換できませんでした'
		END

	RETURN '日付に変換できました'

END
GO
タイトルとURLをコピーしました