我正在首次使用SQL Server中的存储过程。下面是现有的存储过程,我有:在存储过程中添加if if条件并返回硬编码值?
USE [Hello]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Profile]
(@Culture AS VARCHAR(10))
AS
BEGIN
SELECT
lt.ID AS TypeId,
ltt.Title AS TypeTitle
FROM
Hello..lkpLocationType lt
INNER JOIN
Hello..TypeText ltt ON ltt.TypeId = lt.ID
AND ltt.Culture = @Culture
WHERE
lt.IsActive = 1
END
现在我想在这里补充一个条件,所以我需要在这里有if
和else
条件。
- 如果有
licenseId
,其价值是9
然后直接返回三个值A
,B
和C
- 否则执行当前的SQL我有一个连接两个表和文化价值,如果它返回基础活跃。
这是可以通过硬编码的这三个值A
,B
和C
和返回,如果licenseId
值9
直接做在存储过程?所以看起来我需要修改这个alter procedure和licenseId呢?我对吗?
ALTER PROCEDURE [dbo].[Profile]
(@Culture AS VARCHAR(10)
@LicenseId AS INT)
如果这是不可能做那么如果licenseId
值是9,可以返回A
,B
和C
我可以执行另一个SQL?
更新: 现在有道理。我现在有一件事很迷惑。我的VB代码正在执行此存储过程,之后它将通过提取两列TypeTitle
和TypeID
的值来迭代我现有的原始SQL返回的值。
Dim dtLocationTypes As DataTable = dalClientProfile.Profile(Session("Culture"), Session("LicenseID"))
If dtLocationTypes.Rows.Count > 0 Then
ddlLocationType.DataSource = dtLocationTypes
ddlLocationType.DataTextField = "TypeTitle"
ddlLocationType.DataValueField = "TypeID"
ddlLocationType.DataBind()
End If
上面的代码是前细的工作,但是当我加入LicenseID
所以它现在执行。如果块在存储过程,但由于我们没有在returnd结果现在有这两列,所以我认为这是不能够从中提取价值。有没有什么办法可以修改那个If condition
的存储过程,这样在迭代时它可以在VB代码中正常工作?
一般来说,这是在ELSE块中的SQL输出,这就是我的VB代码能够提取它的输出。
TypeID TypeTitle
-----------------
1 Hello
2 World
3 PQR
现在对于IF块中的SQL,我想直接在存储过程中返回类似的东西,如果可能的话?
TypeID TypeTitle
-----------------
1 A
2 B
3 C
预期的输出现在我明白了如何IF,ELSE将在存储过程中的工作。我已经更新了我的问题,并且希望看看如果可能,我们是否可以直接在存储过程中执行此操作? – john
您可以在SELECT语句中使用CASE条件。 –
@david:你在SELECT语句中使用CASE条件吗? –