4
SQL Server 2014でMERGEテーブルを使用してターゲットテーブルに行を挿入します。 ターゲットテーブルの自動インクリメンタルID列にしたいと思います。SQL SERVERでマージテーブルが一致しない列を自動インクリメントする方法はありますか?
CREATE TABLE #targetTable(id int,name varchar(50))
CREATE TABLE #sourceTable(id int,name varchar(50))
INSERT INTO #sourceTable values(1,'John');
INSERT INTO #sourceTable values(1,'Albrt');
INSERT INTO #sourceTable values(1,'Roy');
MERGE #targetTable AS [target]
USING #sourceTable AS [source]
ON [target].id = [source].id
WHEN NOT MATCHED THEN
INSERT (id, Name)
VALUES ((select isnull(max(id),1) + 1 from #sourceTable), source.Name);
select * from #targetTable as T
drop table #targetTable
drop table #sourceTable
select isnull(max(id),1) + 1 from #sourceTable
のようにしようとしましたが、すべての列に同じIDが割り当てられました。この1は、出力の下に、私は私の予想出力のために何をすべきかの変更
2 John
3 Albrt
4 Roy
のように必要な
2 John
2 Albrt
2 Roy
出力を返すのだろうか?
#テーブルの列を変更する権限がありません。 idフィールドもプライマリキーではありません。 –
あなたがテストケースのために一時テーブルを使用していただけです。 ROW_NUMBER()はどうですか?それを示すために編集されました。 –
id値で開始したい場合はid + ROW_NUMBER()に変更することができます。 –