SQL"if exists ..."动态查询

may*_*lle 12 sql sql-server exists

假设我有一个存储在这样的变量中的查询(它实际上是动态填充的,而且更复杂,但这是出于演示目的):

DECLARE @Query VARCHAR(1000) = 'SELECT * FROM dbo.MyTable'
Run Code Online (Sandbox Code Playgroud)

有没有办法检查查询是否会返回任何结果?像这样的东西,但这不起作用:

IF EXISTS (@Query)
BEGIN
    -- do something
END
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是将结果放在临时表中,然后从中查询,但这并不理想,因为动态查询中的列可能会有所不同,我真的不需要临时表除了检查是否会返回某些行之外的任何原因.有没有更好的办法?

Pரத*_*ீப் 17

尝试执行Dynamic query和使用@@RowCount以查找行的存在.

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 
Run Code Online (Sandbox Code Playgroud)


dar*_*rio 11

试试这个:

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
Run Code Online (Sandbox Code Playgroud)

  • 对于`sp_executesql`,`@ Query`需要是`nvarchar` (2认同)