Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql sql server If语句和输出计数命中_Tsql_Sql Server 2005_If Statement - Fatal编程技术网

Tsql sql server If语句和输出计数命中

Tsql sql server If语句和输出计数命中,tsql,sql-server-2005,if-statement,Tsql,Sql Server 2005,If Statement,如果命中率>0,则SQL server应返回false并更新表。我的语法有问题 Create PROCEDURE [dbo].[sp_CheckTransactionExist_TransID] @TransID int AS Declare @Hits bit Declare @Hit bigint SET @Hit = 0 Select @Hit = @Hit + count(1) From tblBooking Where (TransID = @TransID) Selec

如果命中率>0,则SQL server应返回false并更新表。我的语法有问题

Create PROCEDURE [dbo].[sp_CheckTransactionExist_TransID]

@TransID int

AS

Declare @Hits bit
Declare @Hit bigint

SET @Hit = 0


Select @Hit = @Hit + count(1)  From tblBooking Where (TransID = @TransID)
Select @Hit = @Hit + count(1)  From tblOrders Where (TransID = @TransID) 
Select @Hit = @Hit + count(1)  From tblTransaction_DP Where (TransID = @TransID)


if @Hit > 0 then
    begin
        @Hits = True
    end
else
    begin
        @Hits = False
        update tblTransaction set isVoid = 1 where (Transid = @TransID)
    end

Select @Hits

我有以下错误:关键字附近的语法不正确,然后选择。

整个正文可以替换为:

if exists(select * from tblBooking Where TransID = @TransID)
  or exists(select * from tblOrders where TransID = @TransID)
  or exists(select * from tblTransaction_DP Where TransID = @TransID)
begin
    select 1
end
else
begin
    update tblTransaction set isVoid = 1 where (Transid = @TransID)
    select 0
end
注:

  • 如果您关心的只是行与否,那么不要计算行数
  • T-SQL中没有
    那么
  • SQL Server中没有布尔值,因此没有像
    true
    false
  • 您不应该将存储过程命名为以
    sp
    开头;该前缀用于Microsoft的系统过程。如果MS向
    主数据库
    添加一个与您的数据库同名的系统过程,则将使用该系统过程而不是您的系统过程:
我们强烈建议您不要在过程名称中使用前缀sp。SQL Server使用此前缀指定系统存储过程。有关详细信息,请参阅

  • 如果返回值的数据类型很重要,您可以将
    选择0
    替换为
    选择转换(位,0)
    ,将
    选择1
    替换为
    选择转换(位,1)
    。没有简写法来指定位文字
  • 如果要设置变量的值,必须使用语句(或
    SELECT
    )。你不能只给一个变量赋值
试试这个-

CREATE PROCEDURE [dbo].[usp_CheckTransactionExist_TransID]

@TransID INT

AS BEGIN

    IF EXISTS(
        SELECT 1 
        FROM dbo.tblBooking 
        WHERE TransID = @TransID

        UNION

        SELECT 1 
        FROM dbo.tblOrders 
        WHERE TransID = @TransID

        UNION

        SELECT 1 
        FROM dbo.tblTransaction_DP 
        WHERE TransID = @TransID
    ) BEGIN

        RETURN 1

    END
    ELSE BEGIN

        UPDATE dbo.tblTransaction 
        SET isVoid = 1 
        WHERE Transid = @TransID

        RETURN 0

    END

END

非常感谢@Damien_不信者