Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 是否使用GetDate()函数将datetime值插入SQL server(2005)表?_Visual Studio_Tsql - Fatal编程技术网

Visual studio 是否使用GetDate()函数将datetime值插入SQL server(2005)表?

Visual studio 是否使用GetDate()函数将datetime值插入SQL server(2005)表?,visual-studio,tsql,Visual Studio,Tsql,我正在开发一个应用程序(或修复bug),该应用程序是在VS2005C#中开发的。应用程序将数据保存到SQL server 2005。其中一条insert SQL语句尝试将时间戳值插入到一个字段中,其中GetDate()TSQL函数作为日期时间值 Insert into table1 (field1, ... fieldDt) values ('value1', ... GetDate()); 使用GetDate()函数的原因是SQL server可能位于删除站点,并且日期时间可能位于不同的时区

我正在开发一个应用程序(或修复bug),该应用程序是在VS2005C#中开发的。应用程序将数据保存到SQL server 2005。其中一条insert SQL语句尝试将时间戳值插入到一个字段中,其中GetDate()TSQL函数作为日期时间值

Insert into table1 (field1, ... fieldDt) values ('value1', ... GetDate());
使用GetDate()函数的原因是SQL server可能位于删除站点,并且日期时间可能位于不同的时区。因此,GetDate()将始终从服务器获取日期。由于该函数可以在SQL Management Studio中进行验证,因此我得到以下结果:

SELECT GetDate(), LEN(GetDate());
-- 2010-06-10 14:04:48.293   19
我意识到的一点是,长度不到毫秒,也就是说,19实际上代表“2010-06-10 14:04:48”。无论如何,我现在的问题是,在插入之后,fieldDt实际上有一个最长为分钟的日期时间值,例如,“2010-06-10 14:04:00”。我不知道为什么。我没有权限使用触发器更新或更改表以更新字段


我的问题是,如何使用INSERT T-SQL添加一个精度高达毫秒的日期时间值(SQL server的本地日期时间)的新行?

也许这可以代替getdate- SYSDATETIME() 看看这里,如果你能找到你需要的-
检查您的桌子。我猜FieldDT列的数据类型是SmallDateTime,它存储日期和时间,但精度为最接近的分钟。如果我的猜测是正确的,您将无法存储秒或毫秒,除非您更改列的数据类型。

我猜您没有在DateTime字段中存储GetDate()值。如果将值存储在datetime字段中,则将获得datetime类型允许的最大精度。此外,DateTime是一种二进制类型(实际上是双精度),因此19表示19个字节,而不是19个字符

尝试创建一个带有Datetime字段的简单表,如下所示

CREATE TABLE [dbo].[DateTable](
[DateField] [datetime] NOT NULL
)
并将日期添加为

insert into datetable (datefield) values(getdate())
执行select时,将返回一个包括毫秒的值。下面的查询

select *  from datetable
返回


2010-06-11 00:38:46.660当您使用SQL 2005时,不要忘记getutcdate()函数,以确保无论服务器实际位于何处,都有一个恒定的时间引用

想象一下,您的服务器在英国的冬天(即GMT+0),并在上午10:30保存一条记录。然后切换到加利福尼亚州托管的SQL server(GMT+8),8小时后保存另一条记录

使用getdate(),两条记录将在同一时间“10:30:00”保存。使用getutcdate(),第一次保存记录为“10:30:00”,第二次保存记录为“18:30:00”


不是真的回答问题,但在你的情况下很重要。

你可以在过程中这样使用,如果没有过程,只使用getdate()

插入[dbo].[Tbl_用户](用户ID、电子邮件、UAAddress、Ddob、DMobile、,
DEmail、DPassword、DAddress、CreatedDate)值(@userid、@vendoremail@address,@dob,@mobile,@email,@dpassword,@daddress,getdate()

我想这个功能只在SQL 2008中可用。问题是SQL Server 2005,但SYSDATETIME()是仅适用于SQL Server 2008及以上版本。哎呀,你没有意识到…G Mastros可能是对的。请检查该列的数据类型。你是对的,G Mastros。我必须要求DBA进行更改,但我无法使用SmallDateTime数据类型使日期时间值达到毫秒精度。谢谢由于SmallDate有限制,我必须使用带有WHERE子句的FieldDt计数作为条件,以确定FieldDt是否有新值。我可能需要提出更改db的请求,但在我的工作公司需要很长时间。谢谢你的评论。getutcdate()表示日期时间,与位置无关。但是,对于我的情况,客户机需要将本地日期时间指定给字段,因此我必须在TSQL中使用GetDate()在服务器端执行INSERT SQL。