将选择计数(*)值保存为整数(SQL Server)

lar*_*ryq 17 t-sql sql-server aggregate variable-assignment

我对这个陈述有些麻烦,毫无疑问我对这个选择陈述的回复是无知的:

declare @myInt as INT
set @myInt = (select COUNT(*) from myTable as count)

if(@myInt <> 0) 
begin
   print 'there's something in the table'
end
Run Code Online (Sandbox Code Playgroud)

myTable中有记录,但是当我运行上面的代码时,print语句永远不会运行.进一步检查表明,在上面的赋值后,myInt实际上为零.我确定我错过了一些东西,但我认为选择计数会返回一个我可以在上面使用的标量?

gbn*_*gbn 37

如果@myInt为零,则表示表中没有行:如果从未设置,则为NULL.

COUNT将始终返回一行,即使表中没有行也是如此.

编辑,2012年4月:这里的规则在我的答案中描述:COUNT(*)总是返回结果吗?

您的计数/分配是正确的,但可以是任何一种方式:

select @myInt = COUNT(*) from myTable
set @myInt = (select COUNT(*) from myTable)
Run Code Online (Sandbox Code Playgroud)

但是,如果您只是寻找行的存在,(NOT)EXISTS更有效:

IF NOT EXISTS (SELECT * FROM myTable)
Run Code Online (Sandbox Code Playgroud)


小智 11

select @myInt = COUNT(*) from myTable
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 5

Declare @MyInt int
Set @MyInt = ( Select Count(*) From MyTable )

If @MyInt > 0
Begin
    Print 'There''s something in the table'
End
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是您的问题,但您必须使用第二个单引号来解决print语句中的单引号.虽然您可以使用SELECT来填充变量,但是使用SET就像您在这里所做的那样只是更好和更清晰的IMO.此外,您可以保证Count(*)永远不会返回负值,因此您只需检查它是否大于零.