Tôi đang viết các procs được lưu trữ đang được gọi bởi hệ thống cũ. Một trong những ràng buộc của hệ thống kế thừa là phải có ít nhất một hàng trong tập kết quả đơn được trả về từ proc được lưu trữ. Tiêu chuẩn là trả về số không trong cột đầu tiên (vâng, tôi biết!). Cách rõ ràng để đạt được điều này là tạo ra một bảng tạm thời, đặt kết quả vào nó, kiểm tra cho bất kỳ hàng nào trong bảng tạm thời và trả về kết quả từ bảng tạm thời hoặc kết quả trống duy nhất.Thêm hàng trống vào kết quả truy vấn nếu không tìm thấy kết quả
Một cách khác có thể là thực hiện một EXISTS dựa vào cùng một mệnh đề where trong truy vấn chính trước khi truy vấn chính được thực hiện.
Cả hai điều này đều không thỏa mãn. Bất cứ ai có thể nghĩ ra một cách tốt hơn. Tôi đã suy nghĩ xuống theo dòng của một UNION loại như thế này (Tôi biết điều này không làm việc):
--create table #test
--(
-- id int identity,
-- category varchar(10)
--)
--go
--insert #test values ('A')
--insert #test values ('B')
--insert #test values ('C')
declare @category varchar(10)
set @category = 'D'
select
id, category
from #test
where category = @category
union
select
0, ''
from #test
where @@rowcount = 0
Cân nhắc xem xét câu trả lời được chấp nhận sau khi đọc giải pháp @ swe! Thật tốt khi tôi thừa nhận tôi cảm thấy muốn thôi thúc bạn ở đây;) http: // stackoverflow.com/a/32586119/2979473 – ensisNoctis
@ensisNoctis trừ khi tôi bị nhầm lẫn, giải pháp đó sẽ chỉ hoạt động trong các tình huống mà bạn mong đợi hoặc là 0 hoặc một kết quả trở lại –
Vui lòng, bạn vui lòng cho phép tôi chia sẻ với bạn mã này hiện tại đang được sản xuất trong công ty của tôi, tất cả nhờ vào StackOverflow;) Không thể phù hợp với tất cả trong nhận xét này, vì vậy tôi đã đăng một câu trả lời khác, nhưng vẫn là @ swe, chỉ được định dạng tốt hơn. http://stackoverflow.com/a/37046650/2979473 Nó trả về các hàng từ bảng mong muốn nếu chúng tồn tại (bất kỳ số nào> = 1), nếu không các hàng từ một bảng khác (hoặc chữ, như trong ví dụ của tôi). – ensisNoctis