2012-02-17 10 views
1

Usersに各ユーザーのCarを挿入する最も簡単な方法は、CarIDをのIDに設定しますか?テーブル内の各行に関連する行を挿入してリンクする最も簡単な方法は?

[Users] 

- ID 
- Name 
- CarID 

[Cars] 

- ID (Auto increment) 
- Name 

申し訳ありませんが重複した質問がありますが、私は単純な解決策を見つけることができません。私が見つけたすべてが複雑なカーソルを使用している私はあなたが使用しているコードを仮定しているシステムのアップグレードなど

+0

「最も単純な」方法は、ユーザーを自動車に関連付けるためにシステム生成値を使用するのではなく、データベースの外にある現実世界に存在し、またはVIN。 (あなたの車は名前を持っていますか?おそらくそれらを使用してください:) – onedaywhen

+0

あなたは正しいです。しかし、もし私が聞いていないのであれば、 –

答えて

1

を。

サンプルテーブルとデータ:

declare @Users table 
(
    ID int identity primary key, 
    Name varchar(10) not null, 
    CarID int null 
); 

declare @Cars table 
(
    ID int identity primary key, 
    Name varchar(10) not null 
); 

insert into @Users(Name) values ('User1'),('User2'),('User3'); 

は、ユーザーごとに1人の世話を追加し、ユーザーに戻って自動生成CarIDを移動します。

declare @ID table(CarID int, UserID int) 

merge @Cars as C 
using @Users as U 
on 0 = 1 
when not matched then 
    insert (Name) values ('CarName') 
output inserted.ID, U.ID into @ID; 

update U 
set CarID = I.CarID 
from @Users as U 
    inner join @ID as I 
    on U.ID = I.UserID 

SE Dataで試してください。

マージ/出力トリックの詳細はhereです。

+1

これはまさに私が探していたものです:)ありがとう! +1 SEデータの素晴らしい例です。 –

0

中にデータを移行する際など

ポインタは、このためのシンプルで再利用可能な構文は、私の時間を救いますストアドプロシージャを呼び出せますか?

create procedure dbo.CarUserInsert_sp 
(
@p_UserID int, 
@p_UserName varchar(100), 
@p_CarID int, 
@p_CarName varchar(100) 
) 
as 

if not exists (select 1 from Cars where ID = @p_CarID) 
    insert Cars values (@p_CarID, @p_CarName) 

if exists (select 1 from Users where ID = @p_UserID) 
    update Users set Name = @p_UserName, CarID = @p_CarID where ID = @p_UserID 
else 
    insert Users values (@p_UserID, @p_UserName, @p_CarID) 

go 
0

この試してください:あなたは、SQL Server 2008以降である場合は、このようなマージして出力なものを使用することができます

insert into cars (name) 
select distinct(name) from users 

update user 
set carId = (select ID from cars where cars.name=user.Name) 
+0

、私は正直なところ、あなたが必要とするものをよく理解していませんでした。 – Diego

+0

はい、しかしCarsにはユーザーIDがありませんか? –

+0

もう一度、あなたが何をネッドしているかわからない。 carIdがautoincrementの場合、ユーザー名と同じ名前のレコードをCarsに挿入しますか?はいの場合は、コードを更新して – Diego

関連する問題