我正在处理的一个应用程序表现出一些奇怪的行为,在保存数据时我无法解释。该应用程序使用自定义c#数据层。进行保存时,它会将数据插入表变量,然后执行存储过程以保存数据,并将表变量作为参数传递。保存在应用程序运行时有效,但是当我分析正在运行的sql时,由于datetime的转换失败,我无法在SSMS中执行查询。下面是profiler记录的SQL示例,我在表变量中添加了以供参考。
表变量......
CREATE TYPE [dbo].[ExampleType] AS TABLE(
[Name] [nvarchar](200) NOT NULL DEFAULT (''),
[CreationDate] [datetime] NULL,
[UpdateDate] [datetime] NULL
)
来自探索者的SQL ...
declare @p1 dbo.ExampleType
insert into @p1 values(N'','2014-01-29 09:48:18.8000000','2014-01-29 10:05:31.9647267')
exec [dbo].[save_Example] @tableParameter=@p1
当应用程序运行时,我可以看到表中保存的数据,日期时间被截断为日期时间格式,即删除最后4个字符并保存数据。我在分析器中遗漏了哪些东西允许sql运行,还是有其他解释?
答案 0 :(得分:1)
给出的答案是马丁对我来说是正确的,并解释了我所看到的行为。
他的评论链接......
Why does SqlClient use unnecessary XML conversion while passing SqlXml?
答案 1 :(得分:0)
您必须将其插入变量中。 E.g。
@CurrentDate = CONVERT(DATETIME, '2014-01-09 09:48:18')
INSERT INTO @p1 VALUES (.., @CurrentDate, ...)