使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列_MsSql

SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。

在网上找了下,大都说是因为数据库中的字段过小(

来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。
),造成截断的错误导致,仔细检查后发现我的表设计中没有字段过小的情况,也不是单引号的问题。

后经仔细调试发现,由于使用SqlBulkCopy导入时我的文本文件与库中的表列不对应造成的。我的文本文件中有字段18个,而我的表中只使用了9个字段,且有两个是文本文件中没有的(即表结构1中的[Level]与[Cagegory]字段),由数据库填入默认值。表结构如下:

复制代码 代码如下:

表结构11
CREATE TABLE [dbo].[Ryxx](
[Name] [nvarchar](30) NOT NULL,
[IdCardNo] [nvarchar](30) NOT NULL,
[Sex] [nvarchar](2) NOT NULL,
[Height] [nvarchar](5) NULL,
[Level] [nvarchar](2) NULL, --默认为A
[Category] [nvarchar](20) NULL, --默认为“重点管理”
[Sponsor] [nvarchar](100) NULL,
[Contact] [nvarchar](30) NULL,
[Phone] [nvarchar](50) NULL,
[Number] [nvarchar](30) NULL

) ON [PRIMARY]

表结构1

修改后的表结构如下

复制代码 代码如下:

CREATE TABLE [dbo].[Ryxx](
[Name] [nvarchar](30) NOT NULL,
[IdCardNo] [nvarchar](30) NOT NULL,
[Sex] [nvarchar](2) NOT NULL,
[Height] [nvarchar](5) NULL,
[Sponsor] [nvarchar](100) NULL,
[Contact] [nvarchar](30) NULL,
[Phone] [nvarchar](50) NULL,
[Number] [nvarchar](30) NULL,
[Level] [nvarchar](2) NULL, --默认为A
[Category] [nvarchar](20) NULL --默认为“重点管理”
) ON [PRIMARY]

至此,问题解决。分析原因是因为从文本文件中获取的字段对应到表中缺省列中去了,产生了截断,想想使用bcp 时应该也会出现这样的错误。

时间: 2024-09-14 15:49:54

使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列_MsSql的相关文章

使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列

SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar. 在网上找了下,大都说是因为数据库中的字段过小( 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar. ),造成截断的错误导致,仔细检查后发现我的表设计中没有字段过小的情况,也不是单引号的问题. 后经仔细调试发现,由于使用SqlBulkCopy导入时我的文本文件与库中的表列不对应造成的.我的文本文件中有字段18个,而我的表中只使用了9个字段,且有两个是文

datagridview-C#如何将DataGridView1中选中的行删除(SQLserver表中的主键为“学号”)

问题描述 C#如何将DataGridView1中选中的行删除(SQLserver表中的主键为"学号") //删除按钮代码private void dele_Click(object sender EventArgs e) { string cnnstr = ""Data Source=.;Database=stutable;User id=sa;PWD=m123""; SqlConnection cnn = new SqlConnection(c

用vbscript得到注册表中是否存在某个值_vbs

问: 嗨,Scripting Guy!如何知道远程计算机上的注册表中是否存在某个值? -- AL 答: 嗨,AL.完全披露时间:尽管我们叫做 Scripting Guy,但这并不表示我们了解有关脚本编写的一切事情.这个问题就是一个很好的例证.第一次看到这个问题时,我们认为:"好吧,WMI 中显然有某种 If Exists 方法可以实现这个目的."但当我们发现其中并没有这样的方法时,知道我们有多吃惊么?事实上,我们找不到任何可以检查注册表中是否存在某个值的方法.我们甚至--惭愧!--去查

index-lua的元表怎么遍历不到,而且为什么也不能改变表中的元素的值呢,求详解?

问题描述 lua的元表怎么遍历不到,而且为什么也不能改变表中的元素的值呢,求详解? local function tab(t) local proxy = {} local mt = { __index = t, __newindex = function(t, k, v) error("attempt to update readonly a table") end } setmetatable(proxy, mt) return proxy end local days = tab

oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变

问题描述 oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变 oracle 中修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变? 有如下两张表,表a和表b 表a 结构如下: ID Name age 1 lisi 18 2 wangwu 21 3 sunliu 34 4 yiliu 24 ... ... ... 其中ID字段为表a主键且自增 表b结构如下: CID CNAME ID 1 aaaaa 1 2 bbbbb 2 3 cccccc 4 4

sql查询同一表中不同ID的值

问题描述 sql查询同一表中不同ID的值 查询name为'xiaofengceshi'的不同aucid的最大now_price值(结果为两条,aucid为1和3) 解决方案 select max(now_price) from test_tb where name='xiaofengceshi' group by aucid

select-jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去

问题描述 jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去 jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去,代码如下: public void addObjectFields(Company c)throws SQLException{ Connection conn=DBUtil.getConnection(); Statement stmt = conn.createStatement(); String insertSql = " insert

谁对jbpm4_property表中next.dbid的值有深入的研究,我对这个dbid的生成策略,比较模糊?

问题描述 谁对jbpm4_property表中next.dbid的值有深入的研究,我对这个dbid的生成策略,比较模糊?系统运行一段时间后,jbpm4_execution表中的DBID_值比next.dbid的还大,然后系统插入的ID就会重复,报唯一约束异常

隐藏在SQLServer 字段中的超诡异字符解决过程_MsSql

文章作者:jhkdiy 发表日期:2009-10-11 程序架构:B/S 开发环境:Windows XP + IIS6 + VS2003 数 据 库:SQL Server 2000 部分功能:从 SQL Server 中导出数据到 Access. 这套系统做了大半年,这个导入导出还是问题不断,我负责的这块导入导出就是夹在网 络版和单机版系统之间,只要任何一边对数据库做了改动这个导入导出就会失败.哎,烦心 的事不止这些,最近又遇到了一个非常奇怪的问题. 由于之前的导入导出使用SQL Server