【发布时间】:2017-02-01 15:44:04
【问题描述】:
我正在尝试将 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 '+@ENTY_TABLE_NAME+'_ATTR WHERE FIELD_ID='+@FIELD_ID+
' AND ATTR_VAL LIKE ''%'+@VALUE+'%'' ORDER BY ATTR_VAL ' )
END
我遇到了这个错误,我一直在用头撞墙试图修复它。
消息 156,级别 15,状态 1,过程 Sp_enty_srch_attr_vals,第 14 行 [批处理开始第 17 行]
关键字“ELSE”附近的语法不正确。
这个脚本有什么问题?
【问题讨论】:
-
不要在 SQL Server 上使用“sp_”前缀命名您的存储过程。
-
@pmbAustin 好的,我会更改它们。为什么?
-
系统将“sp_”前缀用于存储在主数据库中的系统过程。它首先在 master 中查找存储过程,然后在您当前的数据库中查找,因此会影响性能。以下是一些细节:sqlperformance.com/2012/10/t-sql-queries/sp_prefix
标签: sql sql-server stored-procedures