2012-04-13 39 views
8

Tôi muốn chọn một proc được lưu trữ để thực thi dựa trên đầu vào của người dùng. Một cái gì đó giống như -chúng ta có thể sử dụng CASE với EXEC

EXEC 
CASE @InputParam 
    WHEN 'XML' THEN GetXMLData @ID, 'y' 
    WHEN 'TABLE' THEN GetTableData @ID, 'y' 
END 

này có thể được thực hiện với CASE hay tôi nên xem xét sử dụng các If xây dựng?

+2

'CASE' được được sử dụng để đánh giá nội tuyến trong một truy vấn. Bạn muốn 'IF' vì nó là một cấu trúc điều khiển luồng. – JNK

Trả lời

8

Bạn muốn sử dụng IF xây dựng ở đây:

IF @InputParam = 'XML' 
    EXEC GetXMLData @ID, 'y' 
IF @InputParam = 'TABLE' 
    EXEC GetTableData @ID, 'y' 
1

Bạn có thể làm điều đó như thế này:

IF @InputParam = 'XML' 
BEGIN 
    EXEC GetXMLData @ID, 'y' 
END 

IF @InputParam = 'TABLE' 
BEGIN 
    EXEC GetTableData @ID, 'y' 
END 
+0

Tôi nghĩ rằng bạn có nghĩa là sử dụng 'IF' thay vì' CASE' ở đây ... Đây là cú pháp không hợp lệ. – JNK

+0

Có @JNK là đúng, tôi đã thử mã trên trước đó, và nó đã không hoạt động. – neuDev33

+0

@ neuDev33 ok, bạn có thể sử dụng 'IF' sau đó. Tôi đã sử dụng cú pháp Sybase-ASE: P –

2

Trong kịch bản này, tôi nghĩ rằng ngay cả khi SQL Server cho phép đó, một IF sẽ được rõ ràng hơn.

IF @InputParam = 'XML' 
BEGIN 
    exec GetXMLData @ID, 'y' 
END 
ELSE IF @InputParam = 'TABLE' 
BEGIN 
    exec GetTableData @ID, 'y' 
END 
0

Bạn có thể sử dụng CASE, nhưng bạn sẽ phải sử dụng EXEC (cmd):

DECLARE 
@cmd VARCHAR(200) 
, @InputParam VARCHAR(5) ='TABLE' 
, @ID INT =1 

SELECT @cmd = (CASE @InputParam 
WHEN 'XML' THEN 'GetXMLData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
WHEN 'TABLE' THEN 'GetTableData ' 
     +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39) 
END) 
EXEC(@cmd) 
Các vấn đề liên quan