いくつかの用語を一致させる必要があるため、ユーザー定義関数で case ステートメントを使用したいと考えています。一致にテーブルを使用できますが、計算列の定義内に配置することはできません。
これは IF ステートメントで機能します。
CREATE FUNCTION MaraSizeNumber
(
@ms varchar
)
RETURNS varchar
AS
BEGIN
IF ms = '16-18' RETURN '1'
ELSE IF ms = '18-20' RETURN '2'
ELSE IF ms = '20-22' RETURN '3'
ELSE IF ms = '22+' RETURN '4'
ELSE IF ms = '24+' RETURN '5'
ELSE IF ms = '14-16' RETURN '7'
ELSE RETURN 'BAD'
END
しかし、CASE...WHEN THEN BLOCK を使用した元のスタイルでは、エラー メッセージが表示されます。
CREATE FUNCTION MaraSizeCaseExample
(
@ms varchar
)
RETURNS varchar
AS
BEGIN
CASE ms
WHEN '16-18' THEN RETURN '1'
WHEN '18-20' THEN RETURN '2'
WHEN '20-22' THEN RETURN '3'
WHEN '22+' THEN RETURN '4'
WHEN '24+' THEN RETURN '5'
WHEN '14-16' THEN RETURN '7'
ELSE RETURN 'BAD'
END
END
when パーツで、Incorrect Syntax near case のエラーが発生し、when の近くで不正な構文が発生します。
最後の CREATE FUNCTION ブロックが GO で終わっているため、すべてを正しくバッチ処理しました。CASE のドキュメントによると、正しい構文があります。
他のスカラー関数を使用して、他のパラメーターに対応するシステム内のプロダクション コーディングを生成する、より大きなスカラー関数を構築しています。生産コーディングは製品と顧客に依存するため、CASE を使用できることが最善です。
また、Create Function 行の 2 番目の例では、「不正な構文: 'Create Function' はバッチ内の唯一のステートメントである必要があります」という追加のエラーが発生しますが、他のすべてが同一の場合、そのエラーは発生しません。 IF。
何が間違っていますか、または CASES はスカラー関数ではなく SQL クエリでのみ許可されていますか? エラー メッセージは、SQL Server Management Studio の波線エラー メッセージ システムからのものです。