【发布时间】:2014-01-29 10:44:45
【问题描述】:
我正在开发的一个应用程序在保存数据时出现了一些我无法解释的奇怪行为。该应用程序使用自定义 c# 数据层。当进行保存时,它将数据插入到表变量中,然后执行存储过程来保存数据,将表变量作为参数传递。保存在应用程序运行时有效,但是当我分析正在运行的 sql 时,由于到日期时间的转换失败,我无法在 SSMS 中执行查询。 profiler 记录的 SQL 示例如下,我也添加到 table 变量中以供参考。
表变量...
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 运行的内容,还是有其他解释?
【问题讨论】:
-
当您尝试在 SSMS 中运行它时会发生什么?无效的日期错误?两次登录的默认语言设置是什么?
-
运行插入时收到的错误是从字符串转换日期和/或时间时转换失败。
-
Profiler 中显示的内容只是实际调用的文本表示。它实际上并没有执行该文字字符串as explained here。
-
尝试执行这个与区域无关的表示:插入@p1 values(N'','2014-01-29T09:48:18.8000000','2014-01-29T10:05:31.9647267' )
标签: sql sql-server sql-server-2008 sql-server-profiler