2015-05-29 61 views
0

我想在存儲過程中將列設置爲當前日期(格式爲dd/mm/yyyy),但列簡單設置爲0。如下:列設置爲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='[email protected] 

exec (@dodate) 
+0

您的'tabfget'表格是如何設計的? –

+0

沒有引號,它可能評估爲整數除法。我不記得什麼格式103看起來像然而...好吧,月份除以一年除以一定是零。 – shawnt00

回答

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 。

+0

謝謝戈登!你有任何方法來包括斜槓/而不是破折號 - ? –

+0

@KieraSmith。 。 。這可能是一種格式。或者,只需使用'replace()'。 –

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); 
+0

這裏的問題是,你沒有解決OP發佈的所有主要實現問題。 varchar(max)對於日期的字符串表示來說是荒謬的,在這裏絕對不需要動態sql。這應該不過是一個簡單的更新聲明。 –

+0

是的,你可以做到這一點,沒有動態SQL顯然,這就是爲什麼我認爲他可能想要那些更復雜的東西。 – MelgoV

+1

引用問題實際上是其他人沒有指出的問題,並且與其他問題一樣是一個主要的錯誤。 – shawnt00

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

+0

謝謝Rahul!你有任何方法來包括斜槓/而不是破折號 - ? –

+0

@KieraSmith,如果有幫助,請參閱編輯答案。 – Rahul

0

你一定要做到無動態sql更新。但是零的原因是你沒有把日期作爲一個文字引用,並且它被評估爲整數除法。 (格式103是mm/dd/yyyy。)