批量造数语句
原理就是先写一条数据,然后循环将当前数据再复制一遍(你可以用newid等方式创建不重复的字符串)
于是,每批插入的数据为2^(N-1),可以提高效率
参考脚本如下CREATE TABLE #a (n int NOT NULL PRIMARY KEY )
DECLARE @max AS INT ,@min INT,@rc AS INT
SET @max=130101797;
SET @min=130014711
SET @rc=1;
INSERT INTO #a VALUES (@min);
WHILE @rc * 2 <=@max-@min
BEGIN
INSERT INTO #a SELECT n+@rc FROM #a
SET @rc=@rc*2
END INSERT INTO #a SELECT n +@rc FROM #a WHERE n+@rc<=@max;
原理就是先写一条数据,然后循环将当前数据再复制一遍(你可以用newid等方式创建不重复的字符串)
于是,每批插入的数据为2^(N-1),可以提高效率
参考脚本如下CREATE TABLE #a (n int NOT NULL PRIMARY KEY )
DECLARE @max AS INT ,@min INT,@rc AS INT
SET @max=130101797;
SET @min=130014711
SET @rc=1;
INSERT INTO #a VALUES (@min);
WHILE @rc * 2 <=@max-@min
BEGIN
INSERT INTO #a SELECT n+@rc FROM #a
SET @rc=@rc*2
END INSERT INTO #a SELECT n +@rc FROM #a WHERE n+@rc<=@max;
我用 while 循环 插入 100W条20秒左右
如果用服务器 估计几秒钟吧。
很正常。
对对,据说有这么个bulk的东西,如何写呢
对对,据说有这么个bulk的东西,如何写呢
--test.txt 文件内容
--7000,23940
--234,234
--2394,2
--4234,32--drop table test
create table test(col varchar(200),id int)
bulk insert test
from 'f:\test.txt'
with
(fieldterminator=',',
rowterminator='\n')
select * from test
类似这样
对对,据说有这么个bulk的东西,如何写呢
--test.txt 文件内容
--7000,23940
--234,234
--2394,2
--4234,32--drop table test
create table test(col varchar(200),id int)
bulk insert test
from 'f:\test.txt'
with
(fieldterminator=',',
rowterminator='\n')
select * from test
类似这样能否给个详细点的例子呢,例如文本的格式,然后插入的数据格式什么的例如我的数据有4列
1列是自序ID
2列是name
3列是type
4列是num其中name长度不固定
type类型长度不固定
num在10-15个字节长度
1.你把文本先导出来,手动导入数据库。 这个时候系统就会自动生成一个表,表里每一列的大小和类型你调整下就好。2.使用这个存储过程,文本是以逗号分隔的类似于
1,2,3,4
2,3,4,5
5,6,6,6 这样的数据格式文本档。
里面@filename 是文本文件的地址类似于d:\abc\def.txt 这样的CREATE procedure [imp].[importEJCOUPON]
@fileName nvarchar(80)
as
beginDECLARE @sql nvarchar(4000)
set @sql='BULK INSERT dbo.COUPON FROM '''+@fileName +''' WITH (FIELDTERMINATOR ='''+','+''', ROWTERMINATOR= '''+'\n'+''')';
set @sql=replace(@sql,'\\','\')
print @sql
EXECUTE sp_executesql @sql
--exec @sql
select 1
end
3.调用上面的存储过程 给@filename f赋值就行了。
BULK INSERT dbo.imim FROM 'c:\1.txt' WITH (FIELDTERMINATOR =',', ROWTERMINATOR= '\n')
服务器: 消息 8105,级别 16,状态 3,行 1
'dbo.imim' 不是用户表。无法执行 SET 操作。
执行后是这么个效果
在sql企业管理器中
BULK INSERT dbo.imim FROM 'c:\1.txt' 执行后是dbo.imim不是用户表,不能执行set操作本人基本sql是0,所以尽量详述吧,嘿嘿
http://www.cnblogs.com/wintersun/archive/2011/01/30/1948034.html