問題背景
我試圖確定哪些條件導致沒有記錄/行最多,以便讓我找到資料庫中哪些資料可能需要清理的根本原因。
因此,例如,從下面的查詢中,我想知道它是第一個條件在大多數情況下都失敗了,還是第二個條件是最有問題的,依此類推。
SELECT TOP 1
FROM table
WHERE column1 = @param1 -- (cndtn 1)This condition works without anding with other conditions
AND column2 = @param2
AND column3 = @param3 -- (cndtn 3) This with 1 works 10% of the time
AND column4 = @param4
我的想法之一是打破程式,一次使用一個條件。
DECLARE @retVal int
SELECT @retVal = COUNT(*)
FROM table
WHERE column1 = @param1
IF (@retVal > 0)
--Do Something like above but by using @param2, @param3 and so on
問題
- 如果第一次檢查本身失敗,我將沒有辦法調查其他組合。
- 這似乎也不是很有效,因為這個存盤程序被呼叫了數百次。
其他 SO Post我也找到了這篇很棒的帖子(查找成功的 WHERE 子句之一),但是當沒有回傳記錄時,這不是很有幫助。
uj5u.com熱心網友回復:
如果這只是為了除錯,那么檢測何時@@ROWCOUNT = 0并將這些引數存盤在單獨的除錯表中呢?
SELECT TOP 1 *
FROM SomeTable
WHERE column1 = @param1
AND column2 = @param2
AND column3 = @param3
AND column4 = @param4
-- order by ....
;
-- one or more parameters "failed"
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO SomeTable_Debug( createdDate, column1, column2, column3, column4, column5)
VALUES (getDate(), @param1, @param2, @param3, @param4, @param5)
END
然后,您可以稍后在單獨的查詢腳本中使用除錯表,而不必擔心它對頻繁呼叫的程序的影響。例如,此查詢1在條件“失敗”時回傳,否則回傳null。它沒有針對效率進行優化,但對于偶爾的除錯使用應該沒問題:
SELECT *
, (SELECT 1 WHERE NOT EXISTS (SELECT NULL FROM SomeTable st WHERE st.column1 = d.column1)) AS Matches_Column1
, (SELECT 1 WHERE NOT EXISTS (SELECT NULL FROM SomeTable st WHERE st.column2 = d.column2)) AS Matches_Column2
, (SELECT 1 WHERE NOT EXISTS (SELECT NULL FROM SomeTable st WHERE st.column3 = d.column3)) AS Matches_Column3
, (SELECT 1 WHERE NOT EXISTS (SELECT NULL FROM SomeTable st WHERE st.column4 = d.column4)) AS Matches_Column4
, (SELECT 1 WHERE NOT EXISTS (SELECT NULL FROM SomeTable st WHERE st.column5 = d.column5)) AS Matches_Column5
FROM SomeTable_Debug d
樣本結果:
| ID | 創建日期 | 第 1 列 | 第 2 列 | 第 3 列 | 第 4 列 | 第 5 列 | Matches_Column1 | Matches_Column2 | Matches_Column3 | Matches_Column4 | Matches_Column5 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2022-04-18 16:51:11.487 | 1 | 22 | 3 | 4 | 5 | 空值 | 1 | 空值 | 空值 | 空值 |
| 2 | 2022-04-18 16:51:11.500 | 1 | 22 | 3 | 4 | 56 | 空值 | 1 | 空值 | 空值 | 1 |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463978.html
標籤:sql 数据库 sql-server-2008 存储过程
上一篇:以多次插入為條件
下一篇:CefSharp中文幫助檔案
