J'essaie de créer un formulaire de requête sur un site Web. Le premier objet est une liste déroulante avec des opérateurs. La première valeur par défaut dans la liste déroulante est NULL(1), la deuxième valeur est LIKE(2), etc... Le deuxième objet est une zone de texte où l'utilisateur peut saisir une chaîne comme "A".
Par conséquent, j'essaie de créer la requête SQL ci-dessous pour simuler les variables provenant du site Web. Il s'exécute et renvoie toutes les valeurs lorsque le fichier @op = 1
. Mais j'obtiens toujours l'erreur suivante lorsque je change @op = 2
:
La conversion a échoué lors de la conversion de la valeur nvarchar 'Tom LIKE A%' en type de données int."
DECLARE @StartDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00'
DECLARE @EndDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00'
DECLARE @Op INT = 2
DECLARE @name NVARCHAR(25) = 'A'
SELECT
name,
dttm
FROM
tableName
WHERE
dttm BETWEEN @StartDate AND @EndDate
AND CASE @Op
WHEN 1 THEN 1
WHEN 2 THEN name + ' LIKE ' + @name +'%'
END <> 0
Ne pas utiliser case
. Utilisez simplement la logique booléenne normale :
WHERE dttm BETWEEN @StartDate AND @EndDate AND
( (@op = 1) OR
(@op = 2 AND name LIKE @name + '%')
)
Votre problème spécifique implique la construction d'une LIKE
comparaison dans une chaîne. Cependant, ce qui précède semble être ce que vous voulez faire.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots