将日期插入表变量在SSMS中不起作用,但在运行时工作

时间:2014-01-29 10:44:46

标签: sql sql-server sql-server-2008 sql-server-profiler

我正在处理的一个应用程序表现出一些奇怪的行为,在保存数据时我无法解释。该应用程序使用自定义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运行,还是有其他解释?

2 个答案:

答案 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, ...)