Kiểm soát kết quả trả về null hay empty trong câu truy vấn sql
Hôm nay lại có cái hay ho để chia sẽ đó là làm thế nào để kiểm soát giá trị câu query khi trả về giá trị null hay empty. Lúc lọ mọ modify một câu store procedure, thấy nó dùng cái biểu thức CASE khắp mọi mơi, cứ mỗi cái ELSE trong mỗi CASE thì nó trả về một chuỗi rỗng là ”. Có tầm cả trăm ...
Hôm nay lại có cái hay ho để chia sẽ đó là làm thế nào để kiểm soát giá trị câu query khi trả về giá trị null hay empty.
Lúc lọ mọ modify một câu store procedure, thấy nó dùng cái biểu thức CASE khắp mọi mơi, cứ mỗi cái ELSE trong mỗi CASE thì nó trả về một chuỗi rỗng là ”. Có tầm cả trăm chỗ ELSE ” END lặp lại như thế này. Thấy thế mình bèn bỏ đi thằng ELSE ” vì nghĩ rằng nó dư. Nhưng mà nó đúng là dư thật. Làm câu query lằn nhằn hơn, khó maintain hơn. Lúc mình bỏ nó ra thì nó gặp một vấn đề khác là lúc nào cũng trả về null. Bởi vì câu query mình có cộng chuỗi nên nó bị như vậy.
Sau khi tìm kiếm thì phát hiện ra có CONCAT_NULL_YIELDS_NULL, chúng ta chỉ cần set nó là OFF (mặt định là ON) thì vấn đề được giải quyết. Tùy theo mục đích của bạn muốn trả về null hay chuỗi bạn cần thì set giá trị ON/OF thích hợp.
Cúp pháp:
— Syntax for SQL Server
SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
Ví dụ 1:
SET CONCAT_NULL_YIELDS_NULL ON
Khi được set giá trị ON, thì kết quả nối chuỗi sẽ là như sau:
SELECT 'abc' + NULL => kết quả trả về là NULL
Ví dụ 2:
SET CONCAT_NULL_YIELDS_NULL OFF
Khi được set giá trị OFF, thì kết quả nối chuỗi se là như sau:
SELECT 'abc' + NULL => kết quả trả về là abc
Bên dưới là một ví dụ dùng cả ON và OFF:
PRINT 'Setting CONCAT_NULL_YIELDS_NULL ON';
GO
-- SET CONCAT_NULL_YIELDS_NULL ON and testing.
SET CONCAT_NULL_YIELDS_NULL ON;
GO SELECT 'abc' + NULL ;
GO
-- SET CONCAT_NULL_YIELDS_NULL OFF and testing.
SET CONCAT_NULL_YIELDS_NULL OFF;
GO
SELECT 'abc' + NULL;
GO
Góc Kinh Nghiệm chúc các bạn thành công.