各位大大好,小弟是SQL新手想請教各位前輩還請前輩不另指教
Table A 有三個欄位 [Creat_Time],[Update_Time],[InFo]
當[Creat_Time]不等於[Update_Time]的時候
就UPDATE [InFo] (TRUE OR FALSE)
同時也將[Update_Time]資料UPDATE 到[Creat_Time]
想請問語法該怎麼實現??
--【以下建立測試資料數據】
create table #Tem_Table ([Creat_Time] datetime,[Update_Time] datetime,[InFo] nvarchar(5));
insert into #Tem_Table ([Creat_Time],[Update_Time] ,[InFo]) values
('2018/04/03 12:00:00.000','2018/04/03 12:00:00.000','False')
,('2018/02/03 12:00:00.000','2018/03/04 12:00:00.000','False')
,('2018/03/03 12:00:00.000','2018/01/04 12:00:00.000','False')
;
--原先資料打印
select * from #Tem_Table;
--更新動作
update #Tem_Table
set [Creat_Time] = case when not [Creat_Time]=[Update_Time] then [Update_Time] else [Creat_Time] end
,[InFo] = case when not [Creat_Time]=[Update_Time] then 'True'else [InFo] end
--更新資料打印
select * from #Tem_Table;
先看一下,有問題再跟我說 :-)
大大我這樣解讀對嗎
set [Creat_Time] = case when not [Creat_Time]=[Update_Time] then [Update_Time] else [Creat_Time] end
(這一段是 當 Creat_Time 不等於 Update_Time 那就把Update_Time 值給 Creat_Time)
[InFo] = case when not [Creat_Time]=[Update_Time] then 'True'else [InFo] end
(這一段是 當 Creat_Time 不等於 Update_Time 那就把 'True' 值給 InFo)
另外如果我把這段SQL語法放到C#連線字串上好像沒動作?? 'True'值沒被UPDATE上去
SqlCommand cmd = new SqlCommand("update [Antibiotic_Drog_info] set [Anti_name]='" + p_Anti_name.Text + "', [Dose]='" + p_Dose.Text + "', [Usage]='" + p_Usage.Text + "', [Start_date]='" + p_Start_date.Text + "', [Con_usage]='" + Check_Con_Use + "', [Stop_date]='" + p_Stop_date.Text + "', [Certification] = case when not [Drg_Cre_Time]=[Update_Time] then 'TRUE' else [Certification] end where [Drg_ID]='" + d_id + "' AND FK_Pa_infor_ID='" + Identity_ID + "'", con);
第一段,是的
第二個
你加這段把str_sql的值打印出來看看,照邏輯兩個不相等會修改的
var str_sql = $@"
update [Antibiotic_Drog_info] set [Anti_name]='{p_Anti_name.Text}', [Dose]='{p_Dose.Text}'
, [Usage]='{p_Usage.Text}', [Start_date]='{p_Start_date.Text}'
, [Con_usage]='{Check_Con_Use}', [Stop_date]='{p_Stop_date.Text}'
, [Certification] = case when not [Drg_Cre_Time]=[Update_Time] then 'TRUE' else [Certification] end
where [Drg_ID]='{d_id}' AND FK_Pa_infor_ID='{Identity_ID}'
"
最後盡量不用SQL字串拼接,會被刪DB的 [Postx1] 攻擊行為-SQL 資料隱碼攻擊SQL injection
謝謝大大的指點 我知道錯誤在哪了
程式已經可以正常
declare @A table(
Creat_Time date ,InFo varchar(10),Update_Time date
)
insert into @A
values ('20180101','T1','20180801')
, ('20180101','T2','20180701')
, ('20180301','T3','20180301')
, ('20180102','T4','20180102')
select * from @A --原始資料
------------------------------
declare @Creat_Time date, @Update_Time date
if ( @Creat_Time != @Update_Time)
select * from @A
update @A set Creat_Time = Update_Time
select * from @A --變更後資料