返回列表 发帖

[讨论]数据库表里大量数据一次性写入问题

[讨论]数据库表里大量数据一次性写入问题
议题作者:月亮
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

我现在操作的位置是:
Microsoft SQL Server 2000
企业管理器
sql 查询分析器

我首先
复制内容到剪贴板
代码:
create database student
建立了一个数据库名字为student


然后在student里面建立一个新表
复制内容到剪贴板
代码:
use student
create table s
(
  sno char(5) not null primary key,
  sn varchar(8) not null ,
  sex char(2) not null check (sex in ('boy','girl')),
  age int not null check (age>0),
  dept varchar(20),
  constraint sn_u unique(sn)
)
引用:
学号  姓名  性别  年龄  系别
(sno) (sn) (sex) (age) (dept)
s1  李涛  boy  19  信息
s2  王林  girl  18  计算机
s3  陈高  girl  21  自动化
s4  张杰  boy  17  自动化
s5  吴小莉  girl  19  信息
s6  徐敏敏  girl  20  计算机
我现在要在这个新建的表里写入这些
复制内容到剪贴板
代码:
insert into s values
(
  's1','litao','boy','19','xinxi'
)
……………………

老师说只能这样一行一行的写入
就是说只能:
复制内容到剪贴板
代码:
insert into s values
(
  's1','litao','boy','19','xinxi'
)
…………
可一行一行的写入太累了,所以请问各位大大,有没有办法直接一下子将那个表里的数据全部写入?

我不想一行一行的写入
想把上面的那个表一次性全部写进去能做到吗?舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP 让女孩一夜变的更有女人味


ninty
晶莹剔透§烈日灼然

按照鱼的第一条方法,解决!
可以结贴了!
剩下那个方法我在想

谢谢伤心的鱼!!!!!舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP

月亮
晶莹剔透§烈日灼然

TOP

我一开始也有那个错误

然后修改了建表的语句..

OK!show more..

帖子35 精华0 积分111 阅读权限40 在线时间65 小时 注册时间2007-6-22 最后登录2008-7-15 查看详细资料TOP

月亮
晶莹剔透§烈日灼然

TOP


================================
/*
use student
create table s
(
  sno char(10) not null primary key,
  sn varchar(20) not null ,
  sex char(8) not null check (sex in ('boy','girl')),
  age int not null check (age>0),
  dept varchar(30),
  constraint sn_u unique(sn)
)
================表
s1  李涛  boy  19  信息
s2  王林  girl  18  计算机
s3  陈高  girl  21  自动化
s4  张杰  boy  17  自动化
s5  吴小莉  girl  19  信息
s6  徐敏敏  girl  20  计算机

*/
insert into s (sno,sn,sex,age,dept)
select 's1','李涛','boy',19,'信息' union
select 's2','王林','girl',18,'计算机' union
select 's3','陈高','girl',18,'自动化' union
select 's4','张杰','boy',17,'自动化' union
select 's5','吴小莉','girl',19,'信息' union
select 's6','徐敏敏','girl',20,'计算机'

===================================

这是查询分析器的执行查询语句

下面是结果:

(所影响的行数为 6 行)


多句查询,楼主出现数据截断是因为表结构不合理,插入数据超过了数据库设定的数据长度
就会产生8125错误!

没有什么难的,关键是动手,自己也挺懒的!

Mail: hidehai@yeah.net

show more..

帖子35 精华0 积分111 阅读权限40 在线时间65 小时 注册时间2007-6-22 最后登录2008-7-15 查看详细资料TOP

silenceshell
晶莹剔透§烈日灼然

TOP

直接用BULK INSERT 插就行了
把那些猪内容保存为excel...Www.China-Mu.Co.Kr 猪毛奇迹 1.02Q 将带给你无比的震撼。
帖子1082 精华6 积分5597 阅读权限150 性别男 在线时间576 小时 注册时间2005-3-18 最后登录2008-7-2 查看个人网站
查看详细资料TOP

silenceshell
晶莹剔透§烈日灼然

TOP

excel做了之后,直接导过去不就行了!
为什么就要一行行的写呢!我想飞却怎么也飞不起来。
帖子11 精华0 积分33 阅读权限40 性别男 在线时间16 小时 注册时间2007-12-1 最后登录2008-5-14 查看详细资料TOP

hack520
运维管理组

TOP

搞的什么呀,怎么一次性不能插入多条数据呢?没有见过这样的数据库呀。
那么你数据在备份和恢复的时候,不是也是一条一条的插入进去的吗? 执行了多条吗。
帖子1 精华0 积分6 阅读权限40 性别男 在线时间8 小时 注册时间2006-7-1 最后登录2008-1-16 查看详细资料TOP

黄瓜
晶莹剔透§烈日灼然

TOP

引用:
引用第12楼mingjian987于2007-12-05 19:14发表的 :
呵呵..楼主没有看9楼伤心的鱼的回复吗?他已经给出答案了....
管理员可以过来结业封帖了..呵呵.
这样啊,我还在更改的时候你就发了
你要结也对
不过我没明白
没关系
算了,结吧
我单独在去找找资料看看,
现在脑子乱,反应也迟钝舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP

runkeji
晶莹剔透§烈日灼然

TOP

呵呵..楼主没有看9楼伤心的鱼的回复吗?他已经给出答案了....
管理员可以过来结业封帖了..呵呵.

帖子137 精华0 积分3463 阅读权限100 性别男 在线时间59 小时 注册时间2006-9-8 最后登录2008-7-23 查看详细资料TOP

月亮
晶莹剔透§烈日灼然

TOP

引用:
引用第9楼伤心的鱼于2007-12-04 23:26发表的 :
首先如果你在企业管理器里操作的话,你在你要导入数据的数据库上单击右键-任务-导入数据
数据源那里选择文本文件,分隔符选择空格,NEXT,NEXT,NEXT。。。OK.......
txt文本文件里面的是不是
复制内容到剪贴板
代码:
's1','李涛','B','19','信息',
's2','王林','G','18','计算机',
's3','陈高','G21','自动化',
's4','张杰','B17','自动化',
's5','吴小莉','G19','信息',
's6','徐敏敏','G20','计算机',舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP

mingjian987
蓝色血

荣誉会员

TOP

补充一下,字段那里可以自己设置,导入的时候先把除了字段内容的其他东西删除掉.比如你TXT开头的字段名
留下纯内容,或者在导入数据那里把屏蔽第一行选择上,
本地只有SQL2005.说得不详细,自己去看一下就懂了www.hack521.cn

帖子207 精华1 积分3652 阅读权限150 在线时间464 小时 注册时间2007-4-12 最后登录2008-7-22 查看个人网站
查看详细资料TOP

月亮
晶莹剔透§烈日灼然

TOP

哎,LZ为什么就不去GOOGLE搜搜呢
你们老师也是误导人
MSSQL功能这么强,不至于连这点事都解决不了

说2个解决方法,都是超级简单
首先如果你在企业管理器里操作的话,你在你要导入数据的数据库上单击右键-任务-导入数据
数据源那里选择文本文件,分隔符选择空格,NEXT,NEXT,NEXT。。。OK

第二如果你想用SQL语句,参考这篇文章

<<单表导入/导出文本文件>>

/*--实现数据导入/导出的存储过程

可以实现导入/导出 指定表 到文本文件
支持自定义行/列分隔符

--邹建 2003.07--*/

/*--调用示例
导出调用示例
--导出指定表,这里指定导出表:地区资料
exec file2table @#zj@#,@#@#,@#@#,@#c:\zj.txt@#,@#xzkh_new..地区资料@#,@rowsplit=@#,@#

导入调用示例
--导入指定表,这里指定导入表:地区资料
exec file2table @#zj@#,@#@#,@#@#,@#c:\zj.txt@#,@#xzkh_sa..地区资料@#,0
--*/

if exists(select 1 from sysobjects where name=@#File2Table@# and objectproperty(id,@#IsProcedure@#)=1)
drop procedure File2Table
go

create procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空@#@#
,@password varchar(200) --密码
,@filename varchar(1000) --目录名+文件名
,@tbname varchar(500)=@#@# --数据库..表名
,@isout bit=1  --1为导出(默认),0为导入
,@fdsplit varchar(10)=@#\t@# --字段分隔符,默认为制表符
,@rowsplit varchar(10)=@#\n@# --记录分隔符,默认为回车符
as
declare @sql varchar(8000)

set @sql=@#bcp "@#+@tbname
+case when @isout=1 then @#" out@# else @#" in@# end
+@# "@#+@filename+@#" /c@# +@# /S"@#+@servername
+case when isnull(@username,@#@#)=@#@# then @#@#
else @#" /U"@#+@username end
+@#" /P"@#+isnull(@password,@#@#)+@#"@#
+@# /t"@#+@fdsplit+@#"@#
+@# /r"@#+@rowsplit+@#"@#

exec master..xp_cmdshell @sql
go


OK,不要光想着select insert,随便搜搜就有解决办法了: |www.hack521.cn

帖子207 精华1 积分3652 阅读权限150 在线时间464 小时 注册时间2007-4-12 最后登录2008-7-22 查看个人网站
查看详细资料TOP

伤心的鱼
运维管理组

TOP

引用:
引用第6楼月亮于2007-12-03 20:22发表的 :


你实验一下就发现了
只要字符没有超出限制
单独用sql语句应该是无法实现多语句插入的
.......
你这个问题没有其他限制吧?
我没有去试验,我曾经做过类似的啊,你去试验了吗?show more..

帖子35 精华0 积分111 阅读权限40 在线时间65 小时 注册时间2007-6-22 最后登录2008-7-15 查看详细资料TOP

伤心的鱼
运维管理组

TOP

写个存储过程就可以了。
insert into xx (field1,field2) select x from table2;
select into 也可以批量.
帖子3923 精华128 积分209640 阅读权限200 性别男 在线时间1096 小时 注册时间2007-10-23 最后登录2008-7-24 查看详细资料TOP

silenceshell
晶莹剔透§烈日灼然

TOP

引用:
引用第5楼silenceshell于2007-12-03 15:27发表的 :
用多句插入可以吧,为什么是只能一句呢?

insert into s values(sno,sn,sex, age ,dept,constraint )
select &#39;s1&#39;,&#39;litao&#39;,&#39;boy&#39;,&#39;19&#39;,&#39;xinxi&#39; union
select &#39;s12&#39;,&#39;litao2&#39;,&#39;boy2&#39;,&#39;192&#39;,&#39;xinxi2&#39; union
.......
你实验一下就发现了
只要字符没有超出限制
单独用sql语句应该是无法实现多语句插入的
必须借助其他语言
否则我也不会来问这个问题啦
嘿嘿
不过谢谢你的指点舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP 让女孩一夜变的更有女人味

ring04h
团队执行官

TOP

用多句插入可以吧,为什么是只能一句呢?

insert into s values(sno,sn,sex, age ,dept,constraint )
select &#39;s1&#39;,&#39;litao&#39;,&#39;boy&#39;,&#39;19&#39;,&#39;xinxi&#39; union
select &#39;s12&#39;,&#39;litao2&#39;,&#39;boy2&#39;,&#39;192&#39;,&#39;xinxi2&#39; union


关键字合并进行插入show more..

帖子35 精华0 积分111 阅读权限40 在线时间65 小时 注册时间2007-6-22 最后登录2008-7-15 查看详细资料TOP 良辰择日,预测咨询,公司改名,权威易经

月亮
晶莹剔透§烈日灼然

TOP

[s:66]
好啊,那你写完的代码用球球发我吧!什么语言写都成,只要能用。嘿嘿
sp:我木装啊! [s:50]
像这样的问题解决用vb最方便吗?舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP 良辰择日,预测咨询,公司改名,权威易经

silenceshell
晶莹剔透§烈日灼然

TOP

openrowset
你是说要用一段代码实现对吗?
你能那那段代码写出来看下吗?
最好能用C写
呵呵,
这是我的一个小小的求助!我现在还在踉踉跄跄的学,所以这么简单的sql问题都不能解决
……
如果能帮助我,就先谢谢了!舍得:有了舍才能有得
帖子9 精华0 积分35 阅读权限40 性别女 在线时间64 小时 注册时间2005-12-18 最后登录2008-7-12 查看详细资料TOP 赚更多的钱

bink
荣誉会员

TOP



那天我可问过你咯,如果你TXT里是按照固定格式写的数据,我帮你写个程序生成SQL语句,然后你到查询分析器里执行就可以了,至于固定格式么,我用最简单的方法说:
假设我写的程序为:
每次读取一行;
每行由四个空格分开,分成5个段落,5个段落的顺序分别是第一段落学号,第二段落名字。。。。

PS:明白?如果不明白就诚实的交代,么要装啊,要装去下面的“装吧”很好.
帖子660 精华4 积分5585 阅读权限100 性别男 在线时间247 小时 注册时间2005-9-2 最后登录2007-12-4 查看详细资料TOP

月亮
晶莹剔透§烈日灼然

TOP

复制内容到剪贴板
代码:
学号  姓名  性别  年龄  系别
(sno) (sn) (sex) (age) (dept)
s1  李涛  boy  19  信息
s2  王林  girl  18  计算机
s3  陈高  girl  21  自动化
s4  张杰  boy  17  自动化
s5  吴小莉  girl  19  信息
s6  徐敏敏  girl  20  计算机
这些东西是在文本文件里还是在什么地方?
如果是在文本文件里的话。好像只能一行一行加吧 你也可以自己写个程序去加。
如果是在access或者excel这样的文件里。试试openrowset
帖子10 精华0 积分40 阅读权限40 性别男 在线时间26 小时 注册时间2007-11-10 最后登录2008-6-28 查看详细资料TOP 软件项目外包

月亮
晶莹剔透§烈日灼然

TOP

返回列表