SQL “si il existe...” requête dynamique
Supposons que j'ai une requête stockée dans une variable, comme ceci (c'est en fait rempli dynamiquement et plus complexe, mais c'est pour les besoins de la démonstration):
DECLARE @Query VARCHAR(1000) = 'SELECT * FROM dbo.MyTable'
Est-il un moyen de vérifier si la requête ne renvoie aucun résultat? Quelque chose comme cela, mais cela ne fonctionne pas:
IF EXISTS (@Query)
BEGIN
-- do something
END
La seule façon que je peux penser à faire c'est de mettre les résultats dans une table temporaire, et ensuite de la requête, mais qui n'est pas idéal car les colonnes dans la requête dynamique peut varier et je n'ai vraiment pas besoin de la table temp pour tout autre raison que de vérifier si certaines lignes serait renvoyé. Est-il un meilleur moyen?
Ensuite, essayez avec EXISTE une sous-requête....Faire quelque chose qui existe(select 1 from dbo.Matable). En fin de compte vous êtes à la vérification de la table pour faire quelque chose d'autre lorsque les enregistrements dans cette table.
La sous-requête est dynamique, stockée dans une variable, comme indiqué ci-dessus.
La sous-requête est dynamique, stockée dans une variable, comme indiqué ci-dessus.
EXISTS
ne fonctionne pas quand il est dynamique.OriginalL'auteur mayabelle | 2014-12-30
Vous devez vous connecter pour publier un commentaire.
Essayez d'Exécuter les
Dynamic query
et l'utilisation@@RowCount
de trouver l'existence de lignes.OriginalL'auteur Pரதீப்
Essayez ceci:
sp_executesql
,@Query
aurait besoin d'êtrenvarchar
Vous avez raison. Je viens d'utiliser son code.
OriginalL'auteur dario
Je sais que cette réponse est trop tard. mais, je pars de ce ici pour de l'aide à quelqu'un d'utiliser
IF EXISTS
avec une requête dynamique.C'est la façon dont vous devriez le faire avec des requêtes dynamiques.
Espère que cela a aidé quelqu'un. Droit de Vote si elle fait 🙂
OriginalL'auteur Sam
Vous pouvez utiliser EXEC pour exécuter l'instruction sql, puis d'appeler
@@ROWCOUNT
qui Retourne le nombre de lignes affectées par la dernière instruction, afin de vérifier la ligne existe dans sql select stetement.Je m en occupé, tout en écrivant, que vous avez posté, félicitations à vous. même si vous utilisez Sp_executesql alors que je suis à l'aide directe exec
OriginalL'auteur HaveNoDisplayName