Supponiamo che io abbia una query memorizzata in una variabile come questa (in realtà è popolata dinamicamente e più complessa, ma questo è a scopo dimostrativo):
DECLARE @Query VARCHAR(1000) = 'SELECT * FROM dbo.MyTable'
C'è un modo per verificare se la query restituirà risultati? Qualcosa di simile, ma questo non funziona:
IF EXISTS (@Query)
BEGIN
-- do something
END
L'unico modo che posso pensare di fare questo è mettere i risultati in una tabella temporanea e poi eseguire una query, ma non è l'ideale, perché le colonne nella query dinamica possono variare e in realtà non ho bisogno della tabella temporanea per nessuna ragione se non quella di verificare se alcune righe sarebbero state restituite. Esiste un modo migliore?
Prova ad eseguire Dynamic query
e usa @@RowCount
per trovare l'esistenza delle righe.
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
Prova questo:
DECLARE @Query NVARCHAR(1000) = 'SELECT @C = COUNT(*) FROM dbo.MyTable'
DECLARE @Count AS INT
EXEC sp_executesql @Query, N'@C INT OUTPUT', @[email protected] OUTPUT
IF (@Count > 0)
BEGIN
END
So che questa risposta è troppo tardi. ma, lo lascio qui per aiutare qualcun altro a usare IF EXISTS
con una query dinamica.
Questo è come dovresti farlo con le query dinamiche.
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)
Spero che questo abbia aiutato qualcuno. Vota se l'ha fatto :)
È possibile utilizzare EXEC per eseguire l'istruzione sql, quindi chiamare @@ROWCOUNT
che restituisce il numero di righe interessate dall'ultima istruzione, per verificare che la riga esista in sql selezionare stetement.
DECLARE @Query VARCHAR(1000) = 'SELECT * FROM dbo.MyTable',@hasRow int
EXEC (@Query)
SELECT @hasRow [email protected]@ROWCOUNT // Returns the number of rows affected by the last statement
PRINT @hasRow
IF @hasRow > 0
BEGIN
Print 1
END
BEGIN
Print 2
END