Tsql sql server If语句和输出计数命中
如果命中率>0,则SQL server应返回false并更新表。我的语法有问题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
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
- 您不应该将存储过程命名为以
开头;该前缀用于Microsoft的系统过程。如果MS向sp
添加一个与您的数据库同名的系统过程,则将使用该系统过程而不是您的系统过程:主数据库
- 如果返回值的数据类型很重要,您可以将
替换为选择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_不信者