我有一个SPROC,我们称之为AccountExists
,参数为AccountID
。我有另一个SPROC让我们称之为:CreateAccount
。
我想从AccountExists
拨打CreateAccount
,然后传递AccountID。有点像这样:
IF NOT EXISTS (AccountExists(AccountID))
BEGIN
INSERT INTO dbo.Accounts
(AccountID,
AccountName)
END
如果您能够遵循逻辑,我想要一个创建帐户SPROC,它将调用该支票以查看该帐户是否已存在。
答案 0 :(得分:2)
我不确定我是否理解你的问题,但我会尝试发布答案。
此处的第一个示例使用带有输出参数的存储过程将结果返回到布尔变量@AccountExists
中,您可以看到相当过分。
CREATE PROCEDURE AccountExists
@AccountID INT,
@AccountExists BIT OUTPUT
AS
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.Accounts WHERE AccountID = @AccountID)
SET @AccountExists = 0
ELSE
SET @AccountExists = 1
END
CREATE PROCEDURE CreateAccount
@AccountID INT
AS
BEGIN
DECLARE @AccountExists BIT
EXEC AccountExists @AccountID, @AccountExists OUT
IF NOT @AccountExists
INSERT INTO dbo.Accounts (AccountID, AccountName) VALUES ...
END
第二个例子使用用户定义的函数恕我直言,你试图在你的问题中找到什么。
CREATE FUNCTION AccountExists
(@AccountID INT)
RETURNS BIT
AS
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.Accounts WHERE AccountID = @AccountID)
RETURN 0
ELSE
RETURN 1
END
CREATE PROCEDURE CreateAccount
@AccountID INT
AS
BEGIN
IF SELECT AccountExists(@AccountID) = 0
INSERT INTO dbo.Accounts (AccountID, AccountName) VALUES ...
END
最后,第三个例子使用简单的内联测试来存在价值。我不知道您的帐户存在验证有多复杂(以及代码的频繁程度),所以这种方式可能会让您感到不舒服。
CREATE PROCEDURE CreateAccount
@AccountID INT
AS
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.Accounts WHERE AccountID = @AccountID)
INSERT INTO dbo.Accounts (AccountID, AccountName) VALUES ...
END
我不确定这是不是你要找的东西。另请注意,我使用TSQL已经很长时间了,所以如果它错了,那就打败我了:)