① 如何用sql语句将一个文件夹下的所有txt文件导入到数据库中急!在线等
使用场景:
比如将
C:\Test\
目录下的所有
txt文件内容
导入到
Table_1
中
--定义临时表,用于存放获取的文件名称
CREATE
TABLE
#files
(name
varchar(200)
NULL,
sql
varchar(7000)
NULL)
--获取文件名称,存放在#files
INSERT
#files(name)
exec
master..xp_cmdshell
'dir
c:\test
/b'
--删除不要的文件名称
DELETE
#files
WHERE
coalesce(name,
'')
NOT
LIKE
'Code%'
--插入需要
导入文件内容的
命令SQL,需要修改
Table_1(改为导入的Table)和文件路径
UPDATE
#files
SET
sql
=
'BULK
INSERT
Table_1
FROM
'''
+
'C:\Test\'+name
+
'''
WITH
('
+
'DATAFILETYPE
=
''char'',
FIELDTERMINATOR
=
''\t'',
'
+
'ROWTERMINATOR
=
''\n'')'
--开始执行导入
DECLARE
@sql
varchar(8000)
DECLARE
cur
CURSOR
STATIC
LOCAL
FOR
SELECT
sql
FROM
#files
OPEN
cur
WHILE
1
=
1
BEGIN
FETCH
cur
INTO
@sql
IF
@@fetch_status
<>
0
BREAK
EXEC(@sql)
END
DEALLOCATE
cur
主要分为读取文件夹下所有文件和导入文件内容两部分
--读取文件夹下所有文件
declare
@files
table
(ID
int
IDENTITY,
FileName
varchar(100))
insert
into
@files
execute
xp_cmdshell
'dir
c:\test
/b'
select
'c:\'+
[FileName]
AS
FILEPATH
INTO
#temp
from
@files
SELECT
*
FROM
#temp
--导入文件内容
BULK
INSERT
dbo.Table_1
FROM
#temp
WITH
(
ROWTERMINATOR
='\n'
)
还需要开启
/*****
Step
1
开启
xp_cmdshell
Use
Master
GO
EXEC
master.dbo.sp_configure
'show
advanced
options',
1
RECONFIGURE
WITH
OVERRIDE
GO
EXEC
master.dbo.sp_configure
'xp_cmdshell',
1
RECONFIGURE
WITH
OVERRIDE
GO
*******/
参考:
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/47c8edc1-8cad-4a24-a09a-3fc0c943325c/bulk-insert-multiple-files-tsql
② 怎样找到sql数据库所在的文件夹
1、先打开SQL Server数据库并连接。
2、然后找到目标数据库,右键并点击“属性”。
③ SQL数据库文件的最大容量是多少
SQLserver2000 数据库大小 1,048,516 TB
每个 SQL Server 实例的数据库个数 32,767
每个数据库的文件组个数 256
每个数据库的文件个数 32,767
文件大小(数据) 32 TB
文件大小(日志) 32 TB
理论上你的硬盘有多大,数据库就可以有多大(前提是你的操作系统能识别这些磁盘空间)
④ sql怎么样获取一个文件的大小,即这个文件所暂用字节数
是在sql server中吗?
如果是。使用下面的试试:
--查看c:\temp.log文件的大小
exec master.dbo.xp_cmdshell 'for /f %i in ("c:\temp.log") do @echo %~zi'
⑤ mysql的sql文件导入有没有文件大小限制
非root用户运行MySQL,当MySQL配置比较高时,MySQL运行中生效的参数值与配置的值不一样,所以具体分析一下MySQL是怎么调整这些参数值的。
这篇文章的目的是为了说明在系统资源不够的情况下,MySQL 是怎么调整者三个参数的。说明此文涉及到三个参数open_files_limit、max_connections、table_open_cache。与这三个参数相关的系统资源是打开文件数限制,即文件描述符(fd)限制。系统参数与文件描述符的关系-max_connection&fd: 每一个MySQL connection 都需要一个文件描述符;
-table_open_cache&fd打开一张表至少需要一个 文件描述符,如打开MyISAM需要两个fd;
- 系统最大打开文件数可以通过ulimit -n查看。MySQL调整参数的方式
根据配置(三个参数的配置值或默认值)计算request_open_files(需要的文件描述符);
- 2.获取有效的系统的限制值effective_open_files; 3.根据effective_open_files调整request_open_files; 4.根据调整后的request_open_files,计算实际生效的参数值(show variables可查看参数值)。计算request_open_filesrequest_open_files有三个计算公式:1. // 最大连接数+同时打开的表的最大数量+其他(各种日志等等)2. limit_1= max_connections+table_cache_size * 2 + 10;3. 4. //假设平均每个连接打开的表的数量(2-4)5. //源码中是这么写的:6. //We are trying to allocate no less than7. // max_connections*5 file handles8. limit_2= max_connections * 5;9. 10. //mysql 默认的默认是500011. limit_3= open_files_limit ? open_files_limit : 5000;12. 13. 所以open_files_limit期待的最低14. request_open_files= max(limit_1,limit_2,limit_3);计算effective_open_files:MySQL 的思路:
- 在有限值的的范围内MySQL尽量将effective_open_files的值设大。
- 修正request_open_files
- 修正open_files_limit
- open_files_limit=effective_open_files
- 修正max_connections
- max_connections根据request_open_files来做修正。1. limit = requested_open_files - 10 - TABLE_OPEN_CACHE_MIN * 2;
如果配置的max_connections值大于limit,则将max_connections的值修正为limit
其他情况下max_connections保留配置值
- 修正table_cache_size
- table_cache_size会根据request_open_files来做修正1. // mysql table_cache_size 最小值,4002. limit1 = TABLE_OPEN_CACHE_MIN3. // 根据 requested_open_files 计算4. limit2 = (requested_open_files - 10 - max_connections) / 25. limit = max(limit1,limt2);
如果配置的table_cache_size值大于limit,则将table_cache_size的值修正为limit
其他情况下table_cache_size保留配置值
- 举例
- 以下用例在非 root 用户下运行
- //mysql
- table_open_cache = 999
- open_files_limit = 1500 max_connections = min[(1500 - 10 - 800),500] = 500
requested_open_files= min(effective_open_files,request_open_files)
重新计算参数值
参数设置:
max_connections = 500
//ulimit -n
1500
生效的值:
table_open_cache = ( 1500 - 10 - 500) / 2 =495
⑥ 数据库操作中如何批量执行多个sql文件
Oracle批量执行SQL文件 1:运行cmd进入命令行界面2:进入到存放批量sql的文件夹下面3:输入命令 sqlplus 数据库名/密码@数据库 按回车键4:输入spool 指定路径:\a.log 按回车键 (此步骤的主要作用就是追踪批量执行sql的日志,路径随便写,只要能找到就行,a.log可以随便起名,但是必须要.log后缀)5:@start.sql 按回车键(在批量sql文件夹下写一个文件,名字叫start.sql,其中在这个文件里面写批量sql的文件名)具体格式如下:@@sql的文件名.sql; @@sql的文件名2.sql;.......6:spool off (此时a.log中所有日志已经写入完毕)7:exit 退出sqlplus当然只有一个sql文件,但是里面有多个insert语句,数据量非常大,此时也可以在命令状态下执行,前4步是一样的,第五步就是@文件名.sql;