假设我有两个表帐户和提款。 帐户具有属性Balance。 每次在表Withdraw中输入一个值时,我想检查是否有足够的余额这样做。如果是,我想从余额中减去该金额。
这不是我想要做的,而是我要求的简化版本。
PS:“检查约束”是正确的短语吗?我不太确定。谢谢!
答案 0 :(得分:0)
这是一个简短的例子:
INSERT INTO mytable
(id, name)
SELECT 1, 'test'
WHERE NOT EXISTS(SELECT id
FROM myanother_table
WHERE id = 1)
注意:如果不理解或不看,很难做出任何假设 OP的代码。所以我刚刚提供了一些例子。
答案 1 :(得分:0)
您可以创建一个功能,以验证余额是否为>比你的@value 然后将该函数添加到约束中。
试着看看这个:
答案 2 :(得分:0)
你想要的不是约束。您正在寻找触发器。看一下这个例子。
IF EXISTS ( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Account]')
AND type IN ( N'U' ) )
DROP TABLE [dbo].[Account]
GO
CREATE TABLE dbo.Account
(
AccountID INT NOT NULL ,
AccountBalance DECIMAL(19, 2) NOT NULL
)
GO
IF EXISTS ( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Transaction]')
AND type IN ( N'U' ) )
DROP TABLE [dbo].[Transaction]
GO
CREATE TABLE dbo.[Transaction]
(
TransactionID INT NOT NULL
IDENTITY(1, 1) ,
AccountID INT NOT NULL ,
TransactionAmount DECIMAL(19, 2) NOT NULL
)
GO
CREATE TRIGGER dbo.TRI_Transaction ON dbo.[Transaction]
AFTER INSERT
AS
UPDATE a
SET a.AccountBalance = a.AccountBalance + i.TransactionAmount
FROM Account a
JOIN INSERTED i ON ( a.AccountID = i.AccountID )
GO
INSERT INTO dbo.Account
( AccountID, AccountBalance )
VALUES ( 1234, 0 )
SELECT *
FROM dbo.Account a
LEFT OUTER JOIN dbo.[Transaction] t ON ( a.AccountID = t.AccountID )
INSERT INTO dbo.[Transaction]
( AccountID, TransactionAmount )
VALUES ( 1234, 10 )
SELECT *
FROM dbo.Account a
LEFT OUTER JOIN dbo.[Transaction] t ON ( a.AccountID = t.AccountID )
INSERT INTO dbo.[Transaction]
( AccountID, TransactionAmount )
VALUES ( 1234, 20 )
SELECT *
FROM dbo.Account a
LEFT OUTER JOIN dbo.[Transaction] t ON ( a.AccountID = t.AccountID )
INSERT INTO dbo.[Transaction]
( AccountID, TransactionAmount )
VALUES ( 1234, -15 )
SELECT *
FROM dbo.Account a
LEFT OUTER JOIN dbo.[Transaction] t ON ( a.AccountID = t.AccountID )