0

次の図に示すように、多対多の関係を形成する 3 つのテーブルがあります。

ここに画像の説明を入力

UsersByCompanies次のルールに従って、会社番号 1 とユーザー番号 2 の間のテーブルにエントリを保存するにはどうすればよいですか。

  • ユーザーと会社の間に新しいエントリを作成するときは、 のIsEnabled属性を 1 に設定し、 と の属性を 0 に設定する必要がUsersByCompaniesあるその他の行を設定する必要がCompanies.CompanyCode = 1あります。Users.IDNumber = 2IsEnabled
  • 新しい行の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'
4

1 に答える 1

0
IF NOT EXISTS(select * 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')
 ELSE 
    update dbo.tbUsers 
    set IDNumber = 1234, Name = 'John', LastName= 'Smith'
    where ((IDNumber)) = 1234

  -- now user is valid and existing
  -- update all entries for user which are not company 2
update dbo.tb_UsersByCompanies set IsEnabled = 0 
where  IDNumber= 1234 and CompanyCode <> 2

-- insert if not existsing 
if not Exists (Select * from dbo.tb_UsersByCompanies where  IDNumber= 1234 and CompanyCode =2)
    insert into dbo.tb_UsersByCompanies (IDNumber,  CompanyCode, DateCreated, IsEnabled)
    Values
    (1234,2,GETDATE(),2) 
于 2012-11-26T23:08:08.173 に答える