次の図に示すように、多対多の関係を形成する 3 つのテーブルがあります。
UsersByCompanies
次のルールに従って、会社番号 1 とユーザー番号 2 の間のテーブルにエントリを保存するにはどうすればよいですか。
- ユーザーと会社の間に新しいエントリを作成するときは、 の
IsEnabled
属性を 1 に設定し、 と の属性を 0 に設定する必要がUsersByCompanies
あるその他の行を設定する必要がCompanies.CompanyCode = 1
あります。Users.IDNumber = 2
IsEnabled
- 新しい行の
DateCreated
属性には、現在の日付が含まれている必要があります。
これまでのところ、私はこれを思いつきましたが、エラーがあります:
IF (NOT EXISTS((select IDNumber from dbo.tb_Users where ((IDNumber)) = 1234)))
--the user was not registered
insert into dbo.tbUsers(IDNumber, Name, LastName, department)
values (1234, 'John','Smith','A')
go
insert into dbo.tb_UsersByCompanies (IDNumber, CompanyCode, DateCreated, IsEnabled)
values (1234, 2, getdate(), 1)
go
print 'New Client'
ELSE
update dbo.tbUsers
set IDNumber = 1234, Name = 'John', LastName= 'Smith'
where ((IDNumber)) = 1234
go
IF (EXISTS((select IDNumber, CompanyCode from dbo.tb_UsersByCompanies
where (IDNumber)= 1234 and CompanyCode = 2 and IsEnabled = 1 )))
--The user is already registered in the company
print 'The user is already registered and active in the company'
ELSE
IF(EXISTS((select IDNumber, CompanyCode from dbo.tb_UsersByCompanies
where (IDNumber)= 1234 and IsEnabled = 1 )))
--the user is active in another company
update dbo.tb_UsersByCompanies
set IsEnabled = 0
where ((IDNumber)) = 1234 and IsEnabled = 1
insert into dbo.tb_UsersByCompanies (IDNumber, CompanyCode, DateCreated, IsEnabled)
values (1234, 2, getdate(), 1)
print 'The Client is active in another company'
ELSE
--if it enters here the user was already registered but not linked to a company
insert into dbo.tb_UsersByCompanies (IDNumber, CompanyCode, DateCreated, IsEnabled)
values (1234, 2, getdate(), 1)
print 'the user was already registered but not linked to a company'