2012-04-26 3 views
0

から始まる、それは二年ごとに内容だ変えることができるのは、プロジェクトの目的から始めましょう:列は、別の(datetime型)のカラム

- >私はタイプがDatetimeである列Date_Election_Presidentを持つテーブルを持っています。 ..

は、彼の選挙の日から始め、大統領は二年以上

に到達することはできませんし、同じテーブルで私だけ取るタイプvarchar(3)の別の列President_Eligibleを持って「はい」または「いいえ」

ない
  • はい - 大統領はまだ2年に完了しなかった場合
  • ん - 社長は2年

を完了しなかった場合、自動的にSQL Serverのいずれかの方法がある場合、私はあなたを求めています大統領が2年間を完了した場合、President_Eligibleの列を「はい」から「いいえ」に変更しますか?

この

は少しより多くの情報と、回答フォームでの私のコメントの追加、テーブル

create table GIAC 
(
    Id_GIAC smallint primary key identity(1,1), 
    Nom varchar(50) not null, 
    Adress varchar(50) not null, 

    President varchar(50) not null, 
    President_Eligible varchar(20), 
    Date_Election_President datetime, 
) 
+1

保存する代わりに、クエリで計算してみませんか? –

+0

申し訳ありません..私は理解できませんか? –

+2

データベースにこのデータを格納するのではなく、社長が適格かどうかを検索する場合は、データベースの日付に基づいて計算します。そうすれば、何かを更新する必要はなく、データが照会されるたびに適格性を判断するだけです。 –

答えて

2

を、あなたはそれがあなたのテーブル "に"、あなたは計算列を使用することができますしたいを行う場合:

create table GIAC 
(
    Id_GIAC smallint primary key identity(1,1), 
    Nom varchar(50) not null, 
    Adress varchar(50) not null, 

    President varchar(50) not null, 
    Date_Election_President datetime, 
    President_Eligible as CASE WHEN DATEDIFF(day,Date_Election_President,CURRENT_TIMESTAMP) >= 730 THEN 'NO' ELSE 'YES' END 
) 

そして、すべてのクエリにこのロジックを含める必要はありません。ルールは変わることはありません。

DATEDIFFは、2つの日付の間の識別日付部分の遷移の数をカウントするので、私はまた、選挙以来の日数を数えるのではなく、DATEDIFF(year,...を行うことに変更しました。たとえば、2011年12月31日から2012年1月1日までのDATEDIFF(year,...は1です。

+0

TNKSをTNKSそれは^^私はこれを書く私のデータベース内の列を変更する必要が –

+0

です: ALTER TABLE GIAC (3)CASEとしてWHEN DATEDIFF(日、Date_Election_President、CURRENT_TIMESTAMP)>コラムPresident_Eligibleのvarchar型を変更= 730次に 'NON' ELSE 'OUI' END 私はこの問題に直面します: メッセージ156、レベル15、状態1、行2 キーワード 'CASE'の近くに構文が正しくありません。 –

+0

@ Yassineedouiri - 計算カラムのタイプを指定することはできません。計算カラムを定義する式の結果のタイプから推論されます。 'varchar(3)'にするには、 'CASE'式を' CONVERT' - 'President_Eligible CONVERT(varchar(3)、CASE ... END)'で囲みます。 –

2

です:代わりにあなたが取得するために行くときに、データベース内の資格情報を格納する

かどうか社長が適格であれば、データベースの日付に基づいて計算を行います。そうすれば、何かを更新する必要はなく、データが照会されるたびに適格性を判断するだけです。 DATEDIFF使用するための

SELECT 
    CASE WHEN DATEDIFF(year, Date_Election_President , GetDate()) >= 2 
     THEN 'Yes' 
     ELSE 'No' 
    END 

とInfo:

例クエリもちろんhttp://msdn.microsoft.com/en-us/library/ms189794.aspx

関連する問題