2010-07-13 42 views
23

Có từ khóa tuyên bố trống trong T-SQL trong Sql Server 2005 hoặc mới hơn không? Một cái gì đó giống như câu lệnh NULL trong PL/SQL.Câu lệnh trống trong T-SQL

+9

Bạn đang cố gắng đạt được điều gì? – cjk

Trả lời

1

Không. Không có tương tác "Không hoạt động".

  • Đối với một tệp được lưu trữ, bạn sẽ có ít nhất SET NOCOUNT ON.
  • Đối với một IF/ELSE, nếu một điều kiện là có sản phẩm nào bỏ qua nó

Nếu không, tại sao cậu lại hỏi xin vui lòng? Để được chính xác, điểm là gì?

+1

OK. Cảm ơn. Tôi cần nó cho máy phát điện SQL của tôi. Nhưng dù sao có vẻ như tôi phải loại bỏ một nhánh rỗng (IF/ELSE, CASE) trước đó, khỏi các đối tượng trung gian của tôi. Tôi thấy rằng câu lệnh trống có thể được "mô phỏng" bởi một khối trống (BEGIN END) nhưng nó không có vẻ tốt. – ternyk

6

đôi khi điều xấu xảy ra. Tôi tin rằng họ là một sử dụng hợp lệ. Trong một cấu trúc phân nhánh quyết định dài/phức tạp với một số câu lệnh if else, một số câu lệnh có thể chứa các điều kiện mà bạn đặc biệt không mong muốn hành động nào. Bạn cũng không muốn những điều kiện rơi thông qua làm mặc định khác, nơi mà một số công việc được thực hiện. Trong trường hợp đó, đó là một sử dụng hợp lệ.

Dưới đây là hai cách để làm điều này - xem B và C

Declare @status as char(1) 
set @status = 'D' 

If (@status = 'A') 
    select 'Great!' 

Else if (@status = 'B') 
begin 
    if null=null select null -- predicate never resolves true 
end 

Else if (@status = 'C') 
    set @status = @status -- set a variable to itself 

Else 
    select 'Needs work!' 

Lưu ý, đây là một ví dụ quá đơn giản. Nó được sử dụng tốt nhất để dễ đọc khi điều kiện phức tạp.

+0

Tôi nghĩ rằng 'nếu null = null chọn null' là gần với các trường hợp rỗng NOOP trong ngôn ngữ loại C bình thường – syclee

+0

Tôi thực sự thích phiên bản 'if null = null select null', vì nó có thể lặp lại trong phạm vi , trong trường hợp này cần phải được thực hiện thường xuyên hơn và nó không có bất kỳ tác dụng phụ –

7

Tôi cũng tin rằng đôi khi sử dụng hợp pháp cho tập lệnh không có gì (ví dụ: tập lệnh được tạo tự động).

Mặc dù đó là một chủ đề cũ, tôi sẽ đặt vào hai xu của tôi. Tôi nghĩ rằng việc khai báo một biến là một trong những câu lệnh lành tính nhất mà bạn có thể sử dụng. Tuyên bố thậm chí không hiển thị trong kế hoạch thực hiện:

IF (@variable = 0) 
BEGIN 
    DECLARE @placeHolder BIT; 
END 
34

Bạn có thể khai báo nhãn để không làm gì cả.

DECLARE @value INT 

IF @value IS NULL 
BEGIN 
no_op1: 
END 
+1

Cảm ơn bạn, tôi nghĩ rằng đây là cách tốt nhất để làm gì bởi vì nó thực sự không có gì, nó chỉ khai báo. Tôi sẽ sử dụng điều này cho bản dịch tự động của tôi về mã thủ tục được lưu trữ từ Firebird đến SQL-Server, vì Firebird cho phép các khối trống trong khi SQL-Server thì không. Ít nhất là đối với các trường hợp không thể loại bỏ khối bắt đầu. –

+1

Tuyệt. Và lưu ý rằng cùng một nhãn không thể được xác định nhiều hơn một lần .. Đó là lý do tại sao bạn nên đặt tên nó là no_op1 2 3 ... – sotn

Các vấn đề liên quan