我有一個已被截斷的表(Microsoft SQL 2008)。我現在必須使用順序號填充它,最多爲50,000
可記錄任意數字(最多不超過7個字符)。使用連續編號填充空表
任何人都可以幫助我寫什麼SQL語句,將自動填充A000001
,A0000002
,A0000003
等新的空表,以便我可以對錶中的記錄排序數字。
我有大約50000
記錄,我需要順序輸入,我真的不想通過手動編輯手動編號列。
在此先感謝。
我有一個已被截斷的表(Microsoft SQL 2008)。我現在必須使用順序號填充它,最多爲50,000
可記錄任意數字(最多不超過7個字符)。使用連續編號填充空表
任何人都可以幫助我寫什麼SQL語句,將自動填充A000001
,A0000002
,A0000003
等新的空表,以便我可以對錶中的記錄排序數字。
我有大約50000
記錄,我需要順序輸入,我真的不想通過手動編輯手動編號列。
在此先感謝。
我會使用Excel中使用下列生成您的唯一ID: 在A柱:
=CONCATENATE($C2, TEXT($B2,"000000"))
在B中柱放1的第一行,並在隨後的所有行下面的代碼:
=SUM($B4 + 1)
在C柱:
The letter A
然後,只需導入Excel CSV作爲桌子,你會準備好你所有的ID插入你的空表。
使用Stacked CTE
生成序列號
;WITH e1(n) AS
(
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
), -- 10
e2(n) AS (SELECT 1 FROM e1 CROSS JOIN e1 AS b), -- 10*10
e3(n) AS (SELECT 1 FROM e2 CROSS JOIN e2 AS b), -- 100*100
e4(n) AS (SELECT 1 FROM e3 CROSS JOIN (SELECT TOP 5 n FROM e1) AS b) -- 5*10000
SELECT n = 'A'+right('000000'+
convert(varchar(20),ROW_NUMBER() OVER (ORDER BY n)),7)
FROM e4 ORDER BY n;
檢查here更多的方法來生成與性能分析
下面的SQL裝載表變量了序列號。只需從中選擇並將數據插入新表格。當然不是效率模型,但它會完成工作。
DECLARE @tmp TABLE(
Value NVARCHAR(10)
)
DECLARE @Counter INT=0
DECLARE @Padding NVARCHAR(20)
WHILE @Counter<50000
BEGIN
SET @[email protected]+1
SET @Padding=
CASE LEN(CONVERT(NVARCHAR,@Counter))
WHEN 1 THEN '00000'
WHEN 2 THEN '0000'
WHEN 3 THEN '000'
WHEN 4 THEN '00'
WHEN 5 THEN '0'
ELSE ''
END
INSERT INTO @tmp SELECT 'A' + @Padding + CONVERT(NVARCHAR,@Counter)
END
select * from @tmp
如果我只想填充列而不是表 – khan16 2015-01-15 18:36:40
@ khan16請注意一個具體的例子。您可以將標識列添加到表變量,在表上執行ROWNUMBER以更新並將這些集合加入到更新中。 – UnhandledExcepSean 2015-01-15 20:17:44
使用帶有標識列的表並填充它。然後更新該表來設定你需要如下的阿爾法值:
create table MyTable (
ID int not null identity(1,1),
Alpha varchar(30)
)
truncate table MyTable
begin tran -- makes it run much faster
declare @i int
select @i = 1
while @i < 1000000
begin
insert into MyTable (Alpha) values ('')
select @i = @i + 1
end
commit
update MyTable set Alpha = 'A' + replicate('0', 6 - len(cast(ID as varchar(30)))) + cast(ID as varchar(30))
你能不能只用一個號碼,而不是這個字母要排序爲多少?零填充來完成你的排序是一種愚蠢的行爲,尤其是如果你的點沒有填充足夠的零點並且不得不返回。 – Kritner 2015-01-15 17:24:48
只要序號爲 – khan16 2015-01-15 17:35:25
,數字也沒有問題,只要它們按順序填充任何數字序列即可。 – khan16 2015-01-15 18:51:44