SQL “if exists…” dynamic query

后端 未结 5 1757
难免孤独
难免孤独 2021-01-04 01:19

Suppose I have a query stored in a variable like this (it\'s actually dynamically populated and more complex, but this is for demonstration purposes):

DECLAR         


        
相关标签:
5条回答
  • 2021-01-04 02:04

    I know this answer is too late. but, I'm leaving this here to help someone else to use IF EXISTS with a dynamic query.

    This is how you should do it with dynamic queries.

    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)
    

    Hope this helped someone. Vote if it did :)

    0 讨论(0)
  • 2021-01-04 02:05

    Try Executing the Dynamic query and use @@RowCount to find the existence of rows.

    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 
    
    0 讨论(0)
  • 2021-01-04 02:05

    Hi I think that only way is to put IF EXISTS part into code of execution. My case is to stop execution in point when select affects at least one row, that is goal of IF EXISTS.

    Little example that saves reading all records covering by condition to first occurence:

    set nocount off;
    drop table if exists #temp
    go
    create table #temp (idCol int identity(1,1),someText nvarchar(1))
    go
    insert into #temp values ('a')
    go 25000
    
    declare @query nvarchar(max)
    ,@resultFork bit
    set @query = 'if exists (select * from #temp where idCol % 3 = 0)
        set @resultFork=1
        else
        set @resultFork=0'
    print @query
    exec sp_executeSQL @query, N'@resultFork int output', @resultFork=@resultFork output
    print @resultFork
    /*Now U can use @resultFork in simple if condition...
    if @resultFork = 1 
    begin
        --
    end
    else 
    begin
        --
    end
    */
    
    0 讨论(0)
  • 2021-01-04 02:15

    Try this:

    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
    
    0 讨论(0)
  • 2021-01-04 02:21

    You can use EXEC to execute sql statement, then call @@ROWCOUNT which Returns the number of rows affected by the last statement, to check row exists in sql select stetement.

    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
    
    0 讨论(0)
提交回复
热议问题