Ich versuche, eine IF/ELSE-Anweisung in eine gespeicherte Prozedur zu setzen.IF und ELSE innerhalb der gespeicherten Prozedur
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
Ich bekomme diesen Fehler und ich habe meinen Kopf gegen die Wand hämmern versucht, es zu beheben.
Msg 156, Ebene 15, Status 1, Prozedur Sp_enty_srch_attr_vals, Zeile 14 [Batch Startlinie 17]
falsche Syntax nahe dem Schlüsselwort 'ELSE'.
Was ist falsch an diesem Skript?
Benennen Sie Ihre gespeicherten Prozeduren nicht mit dem Präfix "sp_" auf SQL Server. – pmbAustin
@pmbAustin Ok, ich werde sie ändern. Warum? –
Das Präfix "sp_" wird vom System für Systemprozeduren verwendet, die in der master-Datenbank gespeichert sind. Es verursacht zuerst eine Suche nach der gespeicherten Prozedur in Master und dann in Ihrer aktuellen Datenbank, also ist es ein Leistungseinbruch. Hier sind einige Details: https://sqlperformance.com/2012/10/t-sql-queries/sp_prefix – pmbAustin