Mar*_*lli 3 sql-server-2005 sql-server insert
在 SQL Server 2005 中:
CREATE TABLE __RADHE
(
itemNo varchar(10) not null primary key clustered
);
GO
INSERT INTO __RADHE ???
'34926840', '34927020', '34927202', '34927384', '34927566',
'34927830', '34927889', '34930743', '34930750', '34927897',
'34927848', '34927574', '34927392', '34927210', '34927038',
'34926857', '34917120', '34917286', '34917443', '34926865',
'34927046', '34927228', '34927400', '34927582', '34927855',
'34927905', '34930768', '34930776', '34927913', '34927863',
'34927590', '34927418', '34927236', '34927053', '34926873',
'34917450', '34917294', '34917138', '34917146', '34917302',
'34917468', '34926881', '34927061', '34927244', '34927426',
'34927608', '34927871', '34927921', '34930784', '34927616',
'34927434', '34927251', '34927079', '34926899', '34917476',
'34917310', '34917153', '34917161', '34917328', '34917484',
'34926907', '34927087', '34927269', '34927442', '34927624',
'34927632', '34927459', '34927277', '34927095', '34926915',
'34917492', '34917336', '34917179', '34917187', '34917344',
'34917500', '34926923', '34927103', '34927285', '34927467',
'34927640', '34927657', '34927475', '34927293', '34927111',
'34926931', '34917518', '34917351', '34917195', '34917203',
'34917369', '34917526', '34926949', '34927129', '34927301',
'34927483', '34927665', '34927673', '34927491', '34927319',
'34927137', '34926956', '34917534', '34917377', '34917211',
'34917229', '34917385', '34917542', '34926964', '34927145',
'34927327', '34927509', '34927681', '34927699', '34927517',
'34927335', '34927152', '34926972', '34917559', '34917393',
'34917237', '34917245', '34917401', '34917567', '34926980',
'34927160', '34927343', '34927525', '34927707', '34927715',
'34927533', '34927350', '34927178', '34926998', '34917575',
'34917419', '34917252', '34917260', '34917427', '34917583',
'34927004', '34927186', '34927368', '34927541', '34927723',
'34927731', '34927558', '34927376', '34927194', '34927012',
'34917591', '34917435', '34917278', '34916577', '34916676',
'34933861', '34933879', '34929315', '34916684', '34916585',
'34909861', '34909879', '34916593', '34916692', '34929323',
'34933887', '34933895', '34929331', '34916700', '34916601',
'34909887', '34909895', '34916619', '34916718', '34929349',
'34933903', '34933911', '34929356', '34916726', '34916627',
'34909903', '34909911', '34916635', '34916734', '34929364',
'34933929', '34933937', '34929372', '34916742', '34916643',
'34909929', '34909937', '34916650', '34916759', '34929380',
'34933945'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
由于您使用的是 SQL Server 2005,您需要为每个值执行一次插入。升级到 SQL Server 2012 或更高版本,您将获得 multipleVALUES
子句,使这变得更加容易。
就像是:
INSERT INTO __RADHE (ItemNo)
VALUES ('34933945');
Run Code Online (Sandbox Code Playgroud)
我建议使用 find-and-replace 用所需的语法替换逗号。
将上面值列表中的逗号替换为:
); INSERT INTO __RADHE (itemNo) VALUES (
Run Code Online (Sandbox Code Playgroud)
似乎让你几乎一路走到了那里。
作为旁白; 在引用对象时,您应该始终指定架构。指定时PRIMARY KEY CLUSTERED
,您将隐式创建一个约束,如果不指定名称,SQL Server 将为其命名。如果您不喜欢类似于 的名称,请指定一个名称PK__T1__3214EC27023D5A04
。
例如,你的CREATE TABLE
声明应该是这样的:
CREATE TABLE dbo.[__RADHE]
(
itemNo VARCHAR(10) NOT NULL
CONSTRAINT PK___RADHE
PRIMARY KEY CLUSTERED
);
Run Code Online (Sandbox Code Playgroud)
如果源数据有可能包含重复条目,您可能会发现将主键约束的创建延迟到插入数据并删除重复项之前会更容易。为此,请像这样创建表:
CREATE TABLE dbo.[__RADHE]
(
itemNo VARCHAR(10) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
然后使用上述INSERT INTO ...
语句插入所有行。
运行它以删除重复项:
;WITH src AS (
SELECT r.*
, rn = ROW_NUMBER() OVER (PARTITION BY r.itemNo ORDER BY r.itemNo)
FROM dbo.__RADHE r
)
DELETE
FROM src
WHERE rn > 1;
Run Code Online (Sandbox Code Playgroud)
然后创建主键约束:
ALTER TABLE dbo.__RADHE
ADD CONSTRAINT pk__RADHE
PRIMARY KEY CLUSTERED
(itemNo);
Run Code Online (Sandbox Code Playgroud)
作为旁注,除非您TABLOCKX
在表上使用锁定提示,否则所有行都会使用我上面详述的UNION ALL
方法或单独的INSERT INTO
方法单独记录。如果您有能力在插入期间通过 锁定整个表TABLOCKX
,那么只会记录页面分配,从而大大减少发生的日志记录量。说了这么多,当然有很多“问题”可能会阻止批量记录页面 - 正如 Paul White在这里详述的那样。
归档时间: |
|
查看次数: |
27070 次 |
最近记录: |