我使用用户定义表参数进行批量插入,我创建用户定义表,列名称为dated的数据类型的ModifiedDate
当我将值传递给sql时,它会插入正常,但它会错过毫秒值,那我该如何安装呢
我的用户定义表
CREATE TYPE [dbo].[Test] AS TABLE(
[ModifiedDate] [datetime] NOT NULL,
)
My Sp
ALTER PROCEDURE [dbo].[CP_UpdateData]
-- Add the parameters for the stored procedure here
@Test Test Readonly,
INSERT into Test(ModifiedDate)
Values(ModifiedDate);
但是这里我的日期时间值缺少毫秒,请你帮忙解决这个问题的任何建议
in c#code
using (var cmd = new SqlCommand())
{
cmd.CommandText = "CP_UpdateData";
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("Test", SqlDbType.Structured).Value = ConvertToDataTable(list);
con.Open();
var dataReader = await cmd.ExecuteReaderAsync();
}
public DataTable ConvertToDataTableCampaingList(List<Test> list)
{
var dataTable = new DataTable();
if (list != null && list.Count > 0)
{
dataTable.Columns.Add("ModifiedDate", Type.GetType("System.DateTime"));
foreach (var data in list)
{
var dataRow = dataTable.NewRow();
dataRow["ModifiedDate"] = data.ModifiedDate;
dataTable.Rows.Add(dataRow);
}
}
return dataTable;
}
答案 0 :(得分:1)
答案在CHAT ROOM
讨论中,我将在此处发布:
问题是隐式转换以及每个编译器如何处理数据。默认情况下,DATETIME
没有定义FORMAT
,因此SQL
会隐式转换数据。
所以问题是当你将它作为默认值存储到表中时 格式化是问题CREATE TABLE#Example2(TIMES DATETIME NOT NULL)INSERT INTO#Example2(TIMES)VALUES(CONVERT(DATETIME, GETDATE(),9)),(CAST(GETDATE()AS VARCHAR(20)))注意如何 默认情况下,一个简单的字符串实际上会减少毫秒数 格式错误
注意解决方案是explicitly
定义格式:
当我转换var date =时 (DateTime.Parse(datetime.ToString(&#34; yyyy-MM-dd HH:mm:ss.fff&#34;)));它 返回正确的毫秒数
将DATETIME转换为字符串使其可移植,并且处于不会对数据进行TRUNCATE的数据类型。但是,如果确保准确性,请使用正确的CONVERT(数据类型,表达式,样式)。
DECLARE @TEMP_Result表 ( ModifiedDate DATETIME )
DECLARE @TEMp TABLE ( ModifiedDate varchar(50) ) declare @timestring varchar(50) set @timestring = '2016-06-28 12:53:20.850' Insert into @TEMp(ModifiedDate) values(@timestring) Insert into @TEMP_Result(ModifiedDate) select Convert(datetime, ModifiedDate) from @TEMp select * from @TEMP_Result
道德:注意隐含转换
Implicit
转换是猜测并由编译器确定。它们不可靠,因为此案例显示。
CAST
不是显式转换,可能会返回错误的格式。使用CONVERT
中的SQL
可避免隐式转换。
DATETIME
存储在字符串中使其可移植,避免TRUNCATION
数据,并且可以在SQL
中轻松转换为正确的格式。