列设置为0而不是日期存储过程

时间:2015-05-29 15:00:08

标签: sql sql-server sql-server-2008 stored-procedures

我试图在存储过程中将列设置为当前日期(格式为dd / mm / yyyy),但该列只是设置为0.代码如下:

USE [DBDataOne]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

declare @dateone varchar(max)
declare @dodate varchar(max)

select @dateone=convert(varchar,GETDATE(),103 )

select @dodate='Update [dbo].[tabfget] set DATEIN='+@dateone

exec (@dodate)

4 个答案:

答案 0 :(得分:4)

如果datein存储得当(作为日期/时间),那么您不必担心转换。

此外,您不需要动态SQL。只是:

Update [dbo].[tabfget]
    set DATEIN = cast(getdate() as date);

如果 - 恐怖恐怖 - 您将日期存储为字符串而不是正确的格式,那么您应该修复数据库。如果那是不可能的,你可以这样做:

Update [dbo].[tabfget]
    set DATEIN = convert(varchar(10), GETDATE(), 103);

但是,如果日期存储为字符串,则始终使用ISO标准格式,例如YYYY-MM-DD。

答案 1 :(得分:1)

为什么你不能直接做

Update [dbo].[tabfget] set DATEIN = @dateone

(OR)

Update [dbo].[tabfget] set DATEIN = convert(varchar,GETDATE(),103 )

是的,格式/格式103应该为您/代替-

select GETDATE()

将导致2015-05-29 20:43:38.547

select CONVERT(varchar(15), GETDATE(), 103)

将导致29/05/2015

答案 2 :(得分:0)

试试这个:

declare @dateone varchar(max)
declare @dodate varchar(max)

select @dateone=convert(varchar,GETDATE(),103 )

select @dodate='Update [dbo].[tabfget] set DATEIN='+quotename(@dateone,char(39));

Exec(@dodate);

答案 3 :(得分:0)

你绝对应该在没有动态sql的情况下进行更新。但零的原因是你没有引用日期作为文字,它被评估为整数除法。 (格式103是mm / dd / yyyy。)