易截截图软件、单文件、免安装、纯绿色、仅160KB

Excel数据导入Sql Server出现Null

在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如“区号-电
话号码”)的数据,在导入SQLServer过程中,会发现要么纯数字的数据导过去之后变成了NULL,要么就是数字和其它字符混合的数据导过去之后变成
了NULL。
    为什么有些是纯数字的数据导过去之后变成了NULL,有些却是数字和其它字符混合的数据导过去之后变成了NULL,原来是在将Excel数据导入
SQLServer过程中,SQLServer会做出判断,是采用float型还是nvarchar型来接受数据,测试发现(没有科学依据),SQLServer采用哪一型取决于将要导入
的数据中本身具有哪一型的记录数比例多,如10笔数据,有4笔没有带区号的电话号码,6笔是带区号的电话号码,那么转到SQLServer就会选择
nvarchar型,结果就是4笔没有带区号的电话号码导过去之后全成了NULL,反之亦然。不管怎么样,我们最终都希望SQLServer是采用nvarchar来接受
数据,毕意我们要导入的数据中有数字和其它字符混合的数据,用float型来接受是不可能的,这样只要我们解决了将纯数字的数据转换成字符型并让
SQLServer接受就可以了。
    我首先想到的就是将这个字段的所有数据在Excel中设置为文本格式,刚才说了本来就是希望导入SQLServer时成为字符型,但结果令人失望,不起
作用。
    最终网上搜索到了答案:混合数据类型列的强制解析——IMEX=1
使用 IMEX=1 选参之后,只要取样数据里是混合数据类型的列,一律强制解析为 nvarchar/ntext 文本。当然,IMEX=1 对单一数据类型列的解析是不影
响的。
SELECT * INTO Table08
from OpenDataSource
('Microsoft.Jet.OLEDB.4.0','Data Source="E:\1.xls";Extended properties="Excel 5.0;HDR=Yes;IMEX=1;"')...[Sheet1$]
    注:
    1.这条语句是在SQLServer查询分析器中执行,并且要选择好数据库,否则会把要导入的数据往别的数据库中导了。
    2.Table08是数据导入后在SQLServer中的表名,属于新建,所以请确认在导入数据前数据库中没有该表名,否则会提示已存在同一表名。
    3.Data Source,不要连在一起写,中间有一空格。
    4.E:\1.xls,为Excel所在的绝对路径和数据库名。
    5.Excel 5.0,根据不同的Excel版本


相关文档:

同一个交叉表的动态SQL实现

DECLARE
 TYPE list IS TABLE OF t_stu.project%TYPE INDEX BY BINARY_INTEGER;
 project_list list;
 v_pro_num NUMBER;
 sql_str VARCHAR(255);
 
t_stu
SID SUBJECT SCORE
1        数学       &n ......

关于SQL Server死锁

transaction 1:
------------------------------------------------------
 begin transaction
  update table1 set cola = 'str1'
  Waitfor time '10:12:00'
  update table2 set colb = 'str2'
 rollback transaction
 
transaction 2:
---- ......

SQL 中将一个表转化成建表语句的存储过程

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE proc pGetInsertSQL (@TableName varchar(256))
as
begin
    set nocount on
    declare @sqlstr varchar(4000)
    declare @sqlstr1 varchar(4000)
    declare @sqlstr2 v ......

SQL优化介绍一

一、选择最有效率的表名顺序(只在基于规则的优化器中有效)
 
ORACLE的解析器按照从右到左的顺序处理from子句中的表名,因此from子句中写在最后的表(基础表 driving table)将被最先处理. 在from子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号