IF/ELSEステートメントをストアドプロシージャに配置しようとしています。IFとELSEストアドプロシージャ内
CREATE PROCEDURE [dbo].[Sp_enty_srch_attr_vals]
(@ENTY_ID INT,
@FIELD_ID INT,
@VALUE VARCHAR(5000),
@SQL VARCHAR(5000)
)
AS
BEGIN
IF (@FIELD_ID = 148)
SET nocount ON;
SET @SQL = 'SELECT DISTINCT [GPI] FROM [GPI_ASOC] WHERE [GPI] LIKE ''%@VALUE%'' ORDER BY GPI';
SET @SQL = replace(@SQL, '@VALUE', @VALUE);
EXEC SP_EXECUTESQL @SQL;
ELSE
SET nocount ON;
DECLARE @ENTY_TABLE_NAME VARCHAR(500)
SET @ENTY_TABLE_NAME = (SELECT TOP 1 enty_table_name
FROM enty
WHERE enty.enty_id = @ENTY_ID)
EXEC('SELECT DISTINCT ATTR_VAL FROM '[email protected]_TABLE_NAME+'_ATTR WHERE FIELD_ID='[email protected]_ID+
' AND ATTR_VAL LIKE ''%'[email protected]+'%'' ORDER BY ATTR_VAL ')
END
私はこのエラーが発生しており、私はそれを修正しようと壁に頭を叩いています。
メッセージ156、レベル15、状態1、プロシージャSp_enty_srch_attr_vals、ライン14 [バッチスタートライン17]
'ELSE' キーワードの近くに不正な構文。
このスクリプトで何が問題になっていますか?あなたはIF
状態で複数の文を持っている場合は
SQL Serverでは、ストアドプロシージャに "sp_"というプレフィックスを付けないでください。 – pmbAustin
@pmbAustin [OK]を、私はそれらを変更します。どうして? –
"sp_"接頭辞は、masterデータベースに格納されているシステム・プロシージャのためにシステムによって使用されます。これは、マスターのストアドプロシージャのルックアップを最初に行い、次に現在のデータベースを2番目に実行するため、パフォーマンスが低下します。ここにいくつかの詳細があります:https://sqlperformance.com/2012/10/t-sql-queries/sp_prefix – pmbAustin