Có một bài viết rất hay Điều kiện Tìm kiếm Động trong T ‑ SQL
của Erland Sommarskog. Anh ấy giải thích một số cách tiếp cận có thể được sử dụng và so sánh việc xây dựng SQL động như @ lad2025 được đề xuất và sử dụng OPTION(RECOMPILE)
.
Cá nhân tôi sử dụng OPTION(RECOMPILE)
trong các truy vấn này. Bạn sử dụng SQL Server 2008, vì vậy tùy chọn này là một lựa chọn tốt. Nếu bạn sử dụng tuyến SQL động, hãy nhớ đọc một bài viết khác của anh ấy Lời nguyền và phước lành của động SQL
.
Vì vậy, thủ tục của bạn trở thành một cái gì đó giống như sau:
create procedure proc1
@var1 varchar(100) = null,
@var2 varchar(100) = null,
@var3 varchar(100) = null,
@var4 varchar(100) = null,
........
@var10 varchar(100) = null
as
begin
insert into #a
select * from
(
select *
from
tab1 as a
inner join tab2 as b on a.rollnumber = b.rollnumber
inner join tab3 as c on c.city = b.city
........
inner join tab10 as j on J.id = i.id
where
(a.id = @var1 OR @var1 IS NULL)
and (b.id = @var2 OR @var2 IS NULL)
and (c.id = @var3 OR @var3 IS NULL)
...........
and (J.id = @var10 OR @var10 IS NULL)
) as abc
OPTION(RECOMPILE);
if (select count(*) from #a) < 10
begin
select * from #a
end
else
begin
print 'Cannot display the records as count is more than 10'
end
end
Nhân tiện, không rõ bạn đang cố gắng đạt được điều gì bằng cách kiểm tra count()
, nhưng có thể tất cả những gì bạn cần là đơn giản TOP(10)
để trả về nhiều nhất 10 hàng đầu tiên. Đảm bảo thêm ORDER BY
nếu bạn sử dụng TOP
để trả về kết quả một cách nhất quán. Nếu bạn không biết, bạn có thể có một tham số khác của thủ tục để chỉ ra số hàng tối đa để trả về và sử dụng nó trong TOP(@ParamMaxRowCount)
. Thông thường, một thủ tục được lưu trữ đôi khi trả về tập hợp kết quả và đôi khi chỉ in một thông báo.