を使用せずに、それは部分的な答えであってもよいし、クエリに基づいていくつかのアイデアを得ることができます。
このクエリを使用すると、行番号を作成して自動増分IDを生成できます。
SELECT 'a' + REPLICATE('0', 6 - LEN(BranchId)) + CAST(BranchId AS VARCHAR) AS NewBrachId , BranchId
FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) BranchId FROM Branch) A
この値に基づいて、実際のブランチテーブルに参加し、要件に応じて更新することができます。
サンプルデータとサンプルの実行に:
CREATE TABLE Branch (
BranchId VARCHAR(7) NULL,
BranchName VARCHAR (500)
);
INSERT INTO Branch (BranchName) VALUES
('Branch 001'), ('Branch 002'), ('Branch 003'), ('Branch 004'), ('Branch 005'),
('Branch 006'), ('Branch 007'), ('Branch 008'), ('Branch 009'), ('Branch 010');
CREATE TABLE #Tmp_TableForBranchUpdate (BranchName VARCHAR (500), BranchId INT);
INSERT INTO #Tmp_TableForBranchUpdate (BranchName, BranchId)
SELECT BranchName, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) BranchId
FROM Branch
UPDATE BR SET BranchId = TE.NewBrachId
FROM Branch BR
JOIN #Tmp_TableForBranchUpdate UT ON UT.BranchName = BR.BranchName
JOIN (
SELECT 'a' + REPLICATE('0', 6 - LEN(BranchId)) + CAST(BranchId AS VARCHAR) AS NewBrachId , BranchId
FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) BranchId FROM Branch) A
) TE ON TE.BranchId = UT.BranchId
DROP TABLE #Tmp_TableForBranchUpdate
-- SELECT * FROM Branch
なぜループを使用しますか?それはこの問題を解決するための間違った方法です。 –
a00001、a00002 ...の値を持つ既存のテーブルに現在値を設定したいと思います。ループを使用すると簡単になります –
単にインクリメンタルな数字を生成するのであれば、アイデンティティを使用せずに接頭辞 "a"を忘れてみてください。そして、@ GordonLinoffが既に述べたように。これを行うには、ループが完全に間違った方法です。これは、おそらくROW_NUMBERを使用する単一の更新ステートメントでなければなりません。 –