确定T-SQL select语句是否返回任何行

时间:2015-06-08 12:44:16

标签: sql-server sql-server-2012

我正在使用Microsoft SQL Server 2012.我想在存储过程中设置一个布尔值。如果某个select查询返回的行数多于零,我想将该值设置为true。

Declare @ShowQuotingTool as bit 


(select count(*) from tblAgentsLicensedState where AgentCode = '016893' and StateCode in ('AZ','GA','IA', 'TN', 'SC', 'KS', 'MI' ,'NC', 'UT')) > 0;

如何根据@ShowQuotingTool查询将select设置为true或false?我收到错误Incorrect syntax near ">"

2 个答案:

答案 0 :(得分:3)

您只需将count > 0分配给计数查询即可。这是基于以下事实:任何bit都会将@ShowQuotingTool变量count = 0设置为true,而Declare @ShowQuotingTool as bit SELECT @ShowQuotingTool = (select count(*) from tblAgentsLicensedState where AgentCode = '016893' and StateCode in ('AZ','GA','IA', 'TN', 'SC', 'KS', 'MI' ,'NC', 'UT')) 会将其设置为false

EXISTS

您最好使用COUNT,其性能优于上述IF EXISTS(select * from tblAgentsLicensedState where AgentCode = '016893' and StateCode in ('AZ','GA','IA', 'TN', 'SC', 'KS', 'MI' ,'NC', 'UT')) SET @ShowQuotingTool = 1 ELSE SET @ShowQuotingTool = 0 查询。

$result = mysql_query( "SELECT DATE_FORMAT( date_created, '%d/%m/%Y' ) as date_created, DATE_FORMAT( date_edited, '%d/%m/%Y' ) as date_edited FROM news" );
while( $row = mysql_fetch_array( $result ) ) {
    //print as-it-is
}

答案 1 :(得分:1)

美好的一天,

  1. 如果这不是您想要的,请发布DDL + DML。在任何情况下,请记住下次发布DDL + DML(查询以创建相关表格并插入一些示例数据,以便为我们提供重现问题的工具)。

  2. 回到您的问题

  3. 如果您的SP返回select查询(或任何DML查询)的结果,则表示您需要此查询按原样执行。 在结果上使用COUNT函数的想法意味着您执行另一个查询,这不是逻辑操作,因为我们已经在结果的标题中包含了信息。

    默认情况下,如果您注意到每次在SSMS中执行查询时,都会获得有关行数的信息:“(x行受影响)”。无需使用其他查询。

    如果您正在使用您开发的外部应用程序,并且您的SP不使用“SET NOCOUNT ON”,则此信息将从服务器返回: - )

    您可以在此处查看示例: https://msdn.microsoft.com/en-us/library/ms171921.aspx?f=255&MSPPError=-2147217396