如何在 SQL 服务器存储过程中使用 if/else
How to use if/else in SQL Server stored procedure
我有以下存储过程:
ALTER PROCEDURE [dbo].[Provider]
(@strPro varchar(200))
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT *
FROM [db1].[dbo].[table1]
WHERE [Name] = @strPro
END
我有一个下拉列表,其中包含以下条目:
All People
John D.
Mike K.
Alan H.
Paul Q.
如何修改存储过程,以便如果用户选择 All People
,WHERE
语句将是 LIKE
而不是 =
符号
示例:
ALTER PROCEDURE [dbo].[Provider]
(@strPro varchar(200))
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT *
FROM [db1].[dbo].[table1]
if @strPro = 'All People'
BEGIN
WHERE [Name] LIKE '%'
END
ELSE
BEGIN
WHERE [Name] = @strPro
END
END
像这样
SELECT * FROM [db1].[dbo].[table1]
WHERE @strPro = 'All People' OR [Name] = @strPro
如果 "All People" 被传递 - 第一个条件将为真并且所有记录将被返回(你不需要做 LIKE '%'
)否则只有匹配 [Name] 的记录将被返回.
尝试这样的事情,在存储过程中构建 SQL 语句:
ALTER PROCEDURE [dbo].[Provider]
(
@strPro varchar(200)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @SQL varchar(2000)
-- Insert statements for procedure here
SET @SQL = 'SELECT * FROM [db1].[dbo].[table1] '
if @strPro <> 'All People'
BEGIN
SET @SQL = @SQL + ' WHERE [Name] = ''' + @strPro + '''
END
EXEC (@SQL)
END
注意 1:如果您想要 'All People' ...,则不需要 WHERE 子句
注意2:您可能需要调整一些单引号...
我有以下存储过程:
ALTER PROCEDURE [dbo].[Provider]
(@strPro varchar(200))
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT *
FROM [db1].[dbo].[table1]
WHERE [Name] = @strPro
END
我有一个下拉列表,其中包含以下条目:
All People
John D.
Mike K.
Alan H.
Paul Q.
如何修改存储过程,以便如果用户选择 All People
,WHERE
语句将是 LIKE
而不是 =
符号
示例:
ALTER PROCEDURE [dbo].[Provider]
(@strPro varchar(200))
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT *
FROM [db1].[dbo].[table1]
if @strPro = 'All People'
BEGIN
WHERE [Name] LIKE '%'
END
ELSE
BEGIN
WHERE [Name] = @strPro
END
END
像这样
SELECT * FROM [db1].[dbo].[table1]
WHERE @strPro = 'All People' OR [Name] = @strPro
如果 "All People" 被传递 - 第一个条件将为真并且所有记录将被返回(你不需要做 LIKE '%'
)否则只有匹配 [Name] 的记录将被返回.
尝试这样的事情,在存储过程中构建 SQL 语句:
ALTER PROCEDURE [dbo].[Provider]
(
@strPro varchar(200)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @SQL varchar(2000)
-- Insert statements for procedure here
SET @SQL = 'SELECT * FROM [db1].[dbo].[table1] '
if @strPro <> 'All People'
BEGIN
SET @SQL = @SQL + ' WHERE [Name] = ''' + @strPro + '''
END
EXEC (@SQL)
END
注意 1:如果您想要 'All People' ...,则不需要 WHERE 子句 注意2:您可能需要调整一些单引号...