Phần 1: Giới thiệu về cảnh báo tổng hợp ...
Xem xét nhiều cấp độ làm tổ của bạn Tôi sợ không có cách nào đơn giản để xem bản ghi nào kích hoạt các cảnh báo đó.
Tôi cho rằng bức ảnh đẹp nhất của bạn là xóa từng hàm tổng hợp, mỗi lần, từ phần SELECT của câu lệnh cấp cao nhất và chạy truy vấn để bạn có thể thấy tổng hợp nào đang gây cảnh báo ở cấp cao nhất (nếu Bất kỳ)
Sau đó, bạn nên chuyển sang truy vấn lồng nhau và di chuyển từng truy vấn phụ cung cấp tập hợp cấp cao nhất đến cửa sổ riêng và chạy ở đó, kiểm tra cảnh báo. Bạn nên lặp lại điều này cho các cấp độ làm tổ bổ sung để tìm hiểu điều gì thực sự gây ra cảnh báo.
Bạn cũng có thể sử dụng phương pháp sau.
Phần 2: Giới thiệu về điểm ngắt có điều kiện ...
Vì mục đích gỡ lỗi, bạn di chuyển mỗi bảng lồng nhau ra và đặt dữ liệu của nó vào bảng tạm thời. Sau đó bạn kiểm tra các giá trị null trong bảng tạm thời đó. Bạn đặt một điểm ngắt trong câu lệnh IF. Tôi tin rằng đây là điều tốt nhất gần với điểm ngắt có điều kiện.(NẾU khoản có thể được thay đổi để xây dựng các điều kiện khác)
Dưới đây là một ví dụ rắn,
Thay vì điều này:
SELECT A.col1, A.col2, SUM(A.col3) as col3
FROM (SELECT X as col1, Y as col2, MAX(Z) as col3
FROM (SELECT A as X, B as Y, MIN(C) as Z
FROM myTableC
) as myTableB
) as myTableA
làm điều này:
SELECT A as X, B as Y, MIN(C) as Z
INTO #tempTableC
FROM myTableC
IF EXISTS (SELECT *
FROM #tempTableC
WHERE A IS NULL) BEGIN
SELECT 'A' --- Breakpoint here
END
SELECT X as col1, Y as col2, MAX(Z) as col3
INTO #tempTableB
FROM #tempTableC
IF EXISTS (SELECT *
FROM #tempTableB
WHERE X IS NULL) BEGIN
SELECT 'B' --- Breakpoint here
END
SELECT col1, col2, SUM(col3) as col3
FROM #tempTableB as myTableA
Nguồn
2012-12-25 12:36:48
Tại sao bạn cần phải nắm bắt những cảnh báo? SQL sẽ đơn giản bỏ qua các giá trị null, thường là điều đúng đắn cần làm. Trong ví dụ của bạn, nếu bảng của bạn chứa '{-1, null, -2}', 'max (a)' sẽ trả về '-1', trong khi' max (isnull (a, 0)) 'sẽ trả về' 0' . –
Tôi muốn biết vị trí/lý do cảnh báo bị ném, để kiểm tra lại logic của tôi – Alex