Je travaille avec des procédures stockées dans SQL Server pour la première fois. Voici la procédure stockée existante je:Ajouter une condition else if else dans les procédures stockées et renvoyer des valeurs codées en dur?
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
Maintenant, je veux ajouter une condition supplémentaire ici, donc je dois avoir if
état et else
ici.
- S'il y a une
licenseId
et sa valeur est9
puis revenir trois valeurs directementA
,B
etC
- exécuter Sinon, le sql courant je qui joint deux tables et la base de retour sur la valeur de la culture et si elle c'est actif.
Est-ce possible de le faire directement dans la procédure stockée par ces trois valeurs hardcoding A
, B
et C
et retour si licenseId
valeur est 9
? Donc, il me semble que j'ai besoin de modifier cette procédure de modification et licenseId aussi bien? Ai-je raison?
ALTER PROCEDURE [dbo].[Profile]
(@Culture AS VARCHAR(10)
@LicenseId AS INT)
Si ce n'est pas possible de le faire, je peux alors exécuter une autre SQL si licenseId
valeur est 9 qui peut retourner A
, B
et C
?
Mise à jour: Cela a du sens maintenant. Il y a une chose que je suis confuse maintenant. Mon code VB exécute cette procédure stockée et après qu'il est les valeurs renvoyées itération par mon SQL par extraction de la valeur d'origine existante de deux colonnes TypeTitle
et TypeID
.
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
code ci-dessus fonctionnait très bien avant, mais quand j'ajouté LicenseID
il en est ainsi l'exécution du bloc Si maintenant dans la procédure stockée mais étant donné que nous ne disposons pas de ces deux colonnes maintenant dans le résultat de Returnd donc je crois qu'il ne peut pas pour en extraire de la valeur. Est-il possible de modifier la procédure stockée pour ce If condition
de sorte que lors de l'itération, cela fonctionne bien dans le code VB?
En général c'est la sortie pour SQL qui est dans le bloc ELSE et c'est ainsi que mon code VB est capable de l'extraire. Maintenant, pour le SQL qui est dans le bloc IF, je veux retourner quelque chose comme ça directement dans la procédure stockée si possible?
TypeID TypeTitle
-----------------
1 A
2 B
3 C
Maintenant, je compris que la façon dont IF, va ELSE travailler dans la procédure stockée. J'ai mis à jour ma question et je voulais voir si nous pouvons le faire directement dans la procédure stockée si possible? – john
Vous pouvez utiliser la condition CASE dans votre instruction SELECT. –
@david: Avez-vous essayé avec la condition CASE dans l'instruction SELECT? –