2012-09-04 24 views
8

Tôi đọc: How do I check if a Sql server string is null or empty nhưng nó không giúp tôi trong tình huống này.Làm thế nào để kiểm tra xem một tham số rỗng hoặc null trong thủ tục lưu trữ Sql Server trong câu lệnh IF?

Các đoạn mã từ thủ tục lưu trữ của tôi:

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0) 
     SELECT @sql = 'SELECT * FROM TEST1' 
    ELSE 
     SELECT @sql = 'SELECT * FROM TEST2' 
PRINT @sql; 

@item1NVARCHAR(1000) loại.

Khi thực hiện thủ tục lưu trữ này, tôi cung cấp giá trị cho item1

EXEC [dbo].[my_proc] 
     @item1 = N'' 

nó cho thấy

SELECT * FROM TEST1 // nó là đúng nếu @item1 = N'some'

thay vì

SELECT * FROM TEST2

Đó là một nơi nào đó một hàm trong sql để xác minh xem một chuỗi là null hoặc rỗng HOẶC Tôi đã phạm sai lầm ở đâu đó?

Giống như trong C# ->string.IsNullOrEmpty(myValue)

Trả lời

19

đó là hành vi phù hợp.

nếu bạn thiết lập @item1 đến một giá trị biểu thức dưới đây sẽ là sự thật

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0) 

Dù sao trong SQL Server không có một chức năng như vậy nhưng bạn có thể tạo riêng của bạn:

CREATE FUNCTION dbo.IsNullOrEmpty(@x varchar(max)) returns bit as 
BEGIN 
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0 
    RETURN 0 
ELSE 
    RETURN 1 
END 
+0

Vâng, sai lầm của tôi là tại 'OR' thay vì 'AND'. –

2

Trong số khóa học hoạt động; khi @item1 = N'', nó IS NOT NULL.

Bạn có thể xác định @item1 làm NULL theo mặc định ở đầu quy trình được lưu trữ của bạn và sau đó không chuyển vào tham số.

+0

Giải quyết. Vấn đề là 'OR'. Vì vậy, tôi đã thay đổi thành 'AND'. –

4

Để kiểm tra xem biến là sử dụng null hoặc rỗng này:

IF LEN(ISNULL(@var, '')) = 0 
    -- Is empty or NULL 
ELSE 
    -- Is not empty and is not NULL