--建立測試資料
drop table #table_A;
drop table #table_B;
create table #table_A (List nvarchar(2), [Check] nvarchar(10) );
insert into #table_A (List,[Check])
values ('A','ok')
,('B','ok')
,('C','unknow')
create table #table_B (updatetime datetime, [Check] nvarchar(100) );
--測試還有一筆資料還沒CHECK
insert into #table_B (updatetime,[Check])
select sysdatetime()
,case
when EXISTS(select 1 from #table_A where [Check]<>'ok') then N'尚有資料沒被check'
else
'All Check OK'
end
;
select * from #table_B;
--測試全部資料都CHECK
UPDATE #table_A
SET [Check] = 'ok';
insert into #table_B (updatetime,[Check])
select sysdatetime()
,case
when EXISTS(select 1 from #table_A where [Check]<>'ok') then N'尚有資料沒被check'
else
'All Check OK'
end
;
select * from #table_B;
使用exists判斷,是不是表格A的check欄位都是'ok'狀態
假如是返回字串'All Check OK'
假如不是返回'尚有資料沒被check'
PS.使用exists而非count原因是效率好
有問題再跟我說 :)
謝謝大大的詳解
select sysdatetime()
,case
when EXISTS(select 1 from #table_A where [Check]<>'ok') then N'尚有資料沒被check'
大大請問"sysdatetime()"跟"select 1"什麼意思 我不太懂@@
sysdatetime()
跟C# DateTime.Now 意思一樣
獲取現在的時間,類型datetime
在這邊用意是insert log 時間
select 1
這邊select 1 是跟 EXISTS 做配合
1可以換成任何一個數100、99、'xxoo' 都可以
它只是給exists做判斷有無資料用
非常感謝大大 我弄懂了
另外想請問如果#table_A 裡的 [Check] 欄位
如果有DBNULL值會影響判斷嗎?
另外如果要改成update #tableB語法要怎麼修改
不好意思 問題很多
另外想請問如果#table_A 裡的 [Check] 欄位
如果有DBNULL值會影響判斷嗎?
不會,因為判斷標準是'ok',除了此字串之外都是沒check狀態
另外如果要改成update #tableB語法要怎麼修改
不知道你要的邏輯,可以提供嗎
大大這是我修改後的結果,但是好像判斷錯誤了 @@
依Pa_infor_ID 9 , 10 筆為例哪邊有錯嗎??
UPDATE [Table B] SET [Status] = case when EXISTS(select 1 from Table A where [Certification]<>'True') then N'尚有資料未被審核' else '已審核' end, RJ_Updatetime = sysdatetime() where Pa_infor_ID=FK_Pa_infor_ID
[Certification] 資料型態 bit
不好意思 我原先說的不清楚
好像會造成邏輯上的錯誤
mssql bit概念是只有 0,1,null的差別
如圖:
所以要改成
UPDATE [Table B] SET [Status] = case when EXISTS(select 1 from Table A where [Certification]<>1 or [Certification] is null ) then N'尚有資料未被審核' else '已審核' end, RJ_Updatetime = sysdatetime() where Pa_infor_ID=FK_Pa_infor_ID
謝謝大大 耐心的教導 非常感謝你