0

日付を比較するストアド プロシージャを作成していますが、正しく動作しません。日付のみを比較し、時間は比較しないようにするにはどうすればよいですか? 私がやろうとしているのは、時間を比較し、Id が null の場合は、同じ名前で新しい時間の新しいエントリを挿入することです。同じ名前でテスト時間が異なる複数のエントリを保持しています。

ALTER PROCEDURE [dbo].[UL_TestData]
(
@Name varchar(30),  
@Test_Time smalldatetime,   
@ID INT output
)
AS
Declare  @UpdateTime smalldatetime
SELECT @ID=ID FROM Info_User WHERE Name=@Name AND  UpdateTime= @Test_Time
IF(@ID IS NULL)
 BEGIN
INSERT INTO Info_User (Name, UpdateTime) VALUES (@Name, @UpdateTime)    
 END
4

2 に答える 2

0

日付を単純な日付にキャストして、このソリューションを実装の詳細から独立させます

select @ID=ID 
  from info_user
 where Name = @Name
   and cast (UpdateTime as Date) = Cast(@TestTime as Date)

ただし、追加の (計算された) 列としての日付部分を追加するかUpdateTime、情報を日付と時刻の部分に分割します。これにより、単純な日付でエントリをクエリすることがはるかに簡単になります。

経験則として、列のタイプ (一般的にはテーブル レイアウト) は、データに対して通常実行するクエリのタイプに大きく依存します。

編集:attilaが指摘したように、dateデータ型はバージョン2008以降にのみ存在します

于 2014-03-12T21:51:07.993 に答える