Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2234|回复: 7

[已解决]SQL 中导入的变量是否需求关闭,怎么关闭?

[复制链接]
发表于 2011-11-11 14:12 | 显示全部楼层 |阅读模式
本帖最后由 suxiong 于 2011-11-11 14:22 编辑

    Dim cnn As New ADODB.Connection
    strcn = "rovider=sqloledb;Database=小区系统;Uid=sawd=30687724;data source=127.0.0.1,1433;"
    cnn.Open strcn
    Dim y, arr
'数据太大,现在分三次导入
'第一次
    arr = Range("a1:ak180000")
For y = 1 To 180000

        ssql = "INSERT INTO [20111023]  VALUES ('" & arr(y, 1) & " ','" & arr(y, 2) & " ','" & arr _
               (y, 3) & " ','" & arr(y, 4) & " ','" & arr(y, 5) & " ','" & arr(y, 6) & " ','" & arr(y, 7) & " ','" & arr _
               (y, 8) & " ','" & arr(y, 9) & " ','" & arr(y, 10) & " ','" & arr(y, 11) & " ','" & arr(y, 12) & " ','" & arr _
               (y, 13) & " ','" & arr(y, 14) & " ','" & arr(y, 15) & " ','" & arr(y, 16) & " ','" & arr(y, 17) & " ','" & arr _
               (y, 18) & " ','" & arr(y, 19) & " ','" & arr(y, 20) & " ','" & arr(y, 21) & " ','" & arr(y, 22) & " ','" & arr _
               (y, 23) & " ','" & arr(y, 24) & " ','" & arr(y, 25) & " ','" & arr(y, 26) & " ','" & arr(y, 27) & " ','" & arr _
               (y, 28) & " ','" & arr(y, 29) & " ','" & arr(y, 30) & " ','" & arr(y, 31) & " ','" & arr(y, 32) & " ','" & arr _
               (y, 33) & " ','" & arr(y, 34) & " ','" & arr(y, 35) & " ','" & arr(y, 36) & " ','" & arr(y, 37) & " ')"

        cnn.Execute ssql

ssql是否要关闭
主要是运行的时候提示:“程序打开时,不能运行”
最佳答案
2011-11-11 14:32
     cnn.Close
    Set cnn = Nothing
    Set ssql= Nothing
发表于 2011-11-11 14:32 | 显示全部楼层    本楼为最佳答案   
     cnn.Close
    Set cnn = Nothing
    Set ssql= Nothing
回复

使用道具 举报

发表于 2011-11-11 16:05 | 显示全部楼层
本帖最后由 xpw6061 于 2011-11-11 16:08 编辑

晕死,没见过这么导入数据的,如果是大批量导入,数据量大时,用这样的方式是耗时,耗资源,SQL中有专门批量导入工具,数量特别大时用 BCP工具,或者用 BULK INSERT语句,自己去测试下时间就知道 具体方法看这
http://msdn.microsoft.com/zh-cn/library/ms175915.aspx
回复

使用道具 举报

 楼主| 发表于 2011-11-11 17:11 | 显示全部楼层
xpw6061 发表于 2011-11-11 16:05
晕死,没见过这么导入数据的,如果是大批量导入,数据量大时,用这样的方式是耗时,耗资源,SQL中有专门批量导入工 ...

这个方法,我导过的。但如果是导2007的就要出错。无解
回复

使用道具 举报

 楼主| 发表于 2011-11-11 17:13 | 显示全部楼层
suxiong 发表于 2011-11-11 17:11
这个方法,我导过的。但如果是导2007的就要出错。无解

http://www.excelpx.com/thread-207064-1-1.html
回复

使用道具 举报

 楼主| 发表于 2011-11-11 17:14 | 显示全部楼层
xpw6061 发表于 2011-11-11 16:05
晕死,没见过这么导入数据的,如果是大批量导入,数据量大时,用这样的方式是耗时,耗资源,SQL中有专门批量导入工 ...

这个方法,我导过的。但如果是导2007的就要出错。无解
http://www.excelpx.com/thread-207064-1-1.html
回复

使用道具 举报

发表于 2011-11-11 17:45 | 显示全部楼层
本帖最后由 吕?布 于 2011-11-11 17:46 编辑

应该是不关闭,打开关闭很花时间的。
可不可以用类似Append或AddNew语句呢
回复

使用道具 举报

发表于 2011-11-11 19:47 | 显示全部楼层
本帖最后由 xpw6061 于 2011-11-11 19:49 编辑
suxiong 发表于 2011-11-11 17:13
http://www.excelpx.com/thread-207064-1-1.html


你导过的是用INSERT 不是用    BULK INSERT ,此代码大批量导入数据

还有一个工具:
bcp 实用工具可以在 MicrosoftSQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导入数据文件。除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL 知识。若要将数据导入表中,必须使用为该表创建的格式文件,或者必须了解表的结构以及对于该表中的列有效的数据类型。
有关用于 bcp 语法的语法约定,请参阅 Transact-SQL 语法约定 (Transact-SQL)
注意
如果使用 bcp 备份数据,请创建一个格式化文件来记录数据格式。bcp 数据文件不包括任何架构或格式信息,因此如果已删除表或视图并且不具备格式化文件,则可能无法导入数据。


语法




复制

bcp {[[database_name.][schema].]{table_name | view_name} | "query"}    {in | out | queryout | format} data_file    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]    [-Ffirst_row] [-Llast_row] [-bbatch_size]    [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]     [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]     [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]    [-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]





参数



database_name 指定的表或视图所在数据库的名称。如果未指定,则使用用户的默认数据库。
也可以使用 -d 显式指定数据库名称。
owner表或视图所有者的名称。如果执行该操作的用户拥有指定的表或视图,则 owner 是可选的。如果未指定 owner,并且执行该操作的用户不是指定的表或视图的所有者,则 SQL Server 将返回错误消息,而且该操作将取消。
table_name 将数据导入 SQL Server (in) 时为目标表名称,将数据从 SQL Server (out) 导出时为源表名称。
view_name 将数据复制到 SQL Server (in) 时为目标视图名称,从 SQL Server (out) 中复制数据时为源视图名称。只有其中所有列都引用同一个表的视图才能用作目标视图。有关将数据复制到视图的限制的详细信息,请参阅 INSERT (Transact-SQL)
" query " 一个返回结果集的 Transact-SQL 查询。如果该查询返回多个结果集(如指定 COMPUTE 子句的 SELECT 语句),则只将第一个结果集复制到数据文件,而忽略后续的结果集。请将查询放在英文双引号中,将查询中嵌入的任何内容放在英文单引号中。从查询中大容量复制数据时,还必须指定 queryout
只要在执行 bcp 语句之前存储过程内引用的所有表均存在,查询就可以引用该存储过程。例如,如果存储过程生成一个临时表,则 bcp 语句便会失败,因为该临时表只在运行时可用,而在语句执行时不可用。在这种情况下,应考虑将存储过程的结果插入表中,然后使用 bcp 将数据从表复制到数据文件中。
in | out| queryout | format指定大容量复制的方向,具体如下:
  • in 从文件复制到数据库表或视图。
  • out 从数据库表或视图复制到文件。如果指定了现有文件,则该文件将被覆盖。提取数据时,请注意 bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。
  • queryout 从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。
  • format 根据指定的选项(-n-c-w-N)以及表或视图的分隔符创建格式化文件。大容量复制数据时,bcp 命令可以引用一个格式化文件,从而避免以交互方式重复输入格式信息。format 选项要求指定 -f 选项;创建 XML 格式化文件时还需要指定 -x 选项。有关详细信息,请参阅创建格式化文件

data_file 数据文件的完整路径。将数据大容量导入 SQL Server 时,数据文件将包含要复制到指定的表或视图中的数据。从 SQL Server 中大容量导出数据时,数据文件将包含从表或视图中复制的数据。路径可以有 1 到 255 个字符。数据文件最多可包含 263 - 1 行。



评分

参与人数 1 +5 收起 理由
吕?布 + 5 赞一个!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 04:48 , Processed in 0.278426 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表