Sql server 在使用SqlBulkCopy插入sql\u变量列时,如何设置列类型
我正在使用SqlBulkCopy将.net DataTable对象插入/更新到包含SQL_变量列的SQL Server表。然而,SqlBulkCopy坚持将放入该列的日期时间值存储为sql类型“DateTime”,而我需要的是“datetime2” 我的数据表定义如下:Sql server 在使用SqlBulkCopy插入sql\u变量列时,如何设置列类型,sql-server,ado.net,datatable,sqlbulkcopy,sql-variant,Sql Server,Ado.net,Datatable,Sqlbulkcopy,Sql Variant,我正在使用SqlBulkCopy将.net DataTable对象插入/更新到包含SQL_变量列的SQL Server表。然而,SqlBulkCopy坚持将放入该列的日期时间值存储为sql类型“DateTime”,而我需要的是“datetime2” 我的数据表定义如下: DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("VariantValue", typeof(object))); //th
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("VariantValue", typeof(object))); //this represents my sql_variant column
SELECT SQL_VARIANT_PROPERTY(VariantValue,'BaseType') AS basetype FROM test
然后我把一些需要“datetime2”来存储的数据扔进去
DataRow row = dataTable.NewRow();
row[0] = DateTime.MinValue;
dataTable.Rows.Add(row);
然后我使用SqlBulkCopy将数据输入Sql Server:
using (SqlBulkCopy bulk = new SqlBulkCopy(myConnection))
{
bulk.DestinationTableName = "tblDestination";
bulk.WriteToServer(dataTable);
}
如果数据表中的DateTime值超出sql“DateTime”类型的范围(例如“1/1/0001”),则我的批量复制将失败。这就是为什么列需要为“datetime2”类型的原因
当您编写插入sql_变量列的常规insert语句时,您可以使用CAST或CONVERT控制变量列的类型。例如:
insert into [tblDestination] (VariantValue) values (CAST('1/1/0001' AS datetime2))
然后,如果要按如下方式显示变量列的实际类型:
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("VariantValue", typeof(object))); //this represents my sql_variant column
SELECT SQL_VARIANT_PROPERTY(VariantValue,'BaseType') AS basetype FROM test
您将看到它确实被存储为“datetime2”
但我使用的是SqlBulkCopy,据我所知,没有地方告诉它.net DateTime对象应该存储在“datetime2”而不是“DateTime”类型的列中。据我所知,DataTable对象上也没有地方声明这一点。有谁能帮我弄清楚如何做到这一点吗?根据MSDN页面(在“备注”下): 批量加载类型为的DataTable列时,SqlBulkCopy将失败 SqlDateTime转换为SQL Server列,该列的类型为 SQL Server 2008中添加的日期/时间类型 因此,
SqlBulkCopy
将无法处理DateTime2
值。相反,我建议从两个选项中选择一个:
foreach
),在其中处理数据类型。(使用存储的proc包装insert并利用SqlCommand.Parameters
键入insert的数据可能会有所帮助。)那真臭。我希望他们能抽出时间来更新我的副本。谢谢你提供的信息。是的,我总是发现SQL Server的大容量插入功能不足。如果您的输入数据来自文件,您也可以尝试查看一些SSIS选项。