説明
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