Supposons que ma requête soit stockée dans une variable comme celle-ci (elle est en fait remplie de manière dynamique et plus complexe, mais à des fins de démonstration):
DECLARE @Query VARCHAR(1000) = 'SELECT * FROM dbo.MyTable'
Existe-t-il un moyen de vérifier si la requête renvoie des résultats? Quelque chose comme ça, mais ça ne marche pas:
IF EXISTS (@Query)
BEGIN
-- do something
END
Le seul moyen auquel je puisse penser est de placer les résultats dans une table temporaire, puis d'effectuer une requête à partir de celle-ci, mais ce n'est pas idéal car les colonnes de la requête dynamique peuvent varier et je n'ai vraiment pas besoin de la table temporaire du tout pour une raison autre que celle de vérifier si certaines lignes seraient renvoyées. Y a-t-il un meilleur moyen?
Essayez d’exécuter le Dynamic query
et utilisez @@RowCount
pour rechercher l’existence de lignes.
DECLARE @Query NVARCHAR(1000) = 'SELECT * FROM [dbo].[Mytable]',
@rowcnt INT
EXEC Sp_executesql @query
SELECT @rowcnt = @@ROWCOUNT
IF @rowcnt > 0
BEGIN
PRINT 'row present'
END
Essaye ça:
DECLARE @Query NVARCHAR(1000) = 'SELECT @C = COUNT(*) FROM dbo.MyTable'
DECLARE @Count AS INT
EXEC sp_executesql @Query, N'@C INT OUTPUT', @C=@Count OUTPUT
IF (@Count > 0)
BEGIN
END
Je sais que cette réponse est trop tard. mais, je laisse ceci ici pour aider quelqu'un d'autre à utiliser IF EXISTS
avec une requête dynamique.
Voici comment procéder avec les requêtes dynamiques.
DECLARE @Query VARCHAR(MAX)
SET @Query = 'SELECT * FROM [dbo].[MyTable]'
SET @Query = 'IF EXISTS (' + @Query + ')
BEGIN
-- do something
print ''1''
END
ELSE
BEGIN
-- do something else
print ''0''
END
'
exec (@Query)
J'espère que cela a aidé quelqu'un. Votez si c'était le cas :)
Vous pouvez utiliser EXEC pour exécuter une instruction SQL, puis appeler @@ROWCOUNT
, qui renvoie le nombre de lignes affectées par la dernière instruction, pour vérifier si une ligne existe dans l'instruction SQL select.
DECLARE @Query VARCHAR(1000) = 'SELECT * FROM dbo.MyTable',@hasRow int
EXEC (@Query)
SELECT @hasRow =@@ROWCOUNT // Returns the number of rows affected by the last statement
PRINT @hasRow
IF @hasRow > 0
BEGIN
Print 1
END
BEGIN
Print 2
END