2012-06-27 11 views
10

Tôi muốn sử dụng CASE trong quy trình được lưu trữ của mình. Tôi nhận được một số lỗi cú pháp trong mã của tôi:Cách sử dụng Chuyển đổi trong SQL Server

select 
    case @Temp 
    when 1 then (@[email protected]+1) 
    when 2 then (@[email protected]+1) 
    end 

Khi chạy, tôi nhận được:

cú pháp không chính xác gần '='.

tại dòng này ở đây:

@selectoneCount = @selectoneCount + 1 

gần bằng nhau.

Thực ra tôi đang nhận được giá trị trả lại từ một giá trị khác vào @temp và sau đó nó @temp = 1 thì tôi muốn tính số @SelectoneCount 1 và cứ thế. Vui lòng cho tôi biết cú pháp chính xác là gì.

+2

'CASE' là một * * biểu thức trả về một *giá trị*. Tôi không có ý tưởng những gì bạn đang cố gắng làm ở đây - có thể cho chúng tôi biết mục tiêu tổng thể, và sau đó đặt mã trên bên trong một mẫu lớn hơn để thiết lập bối cảnh? –

+0

Câu trả lời này hữu ích trong trường hợp bạn thực sự muốn thực hiện luồng logic thay vì chọn một biểu thức http://stackoverflow.com/a/14760234/74585 –

Trả lời

29

CASE chỉ là "công tắc" thành trả lại giá trị - không được thực hiện toàn bộ khối mã.

Bạn cần thay đổi mã của bạn để một cái gì đó như thế này:

SELECT 
    @selectoneCount = CASE @Temp 
         WHEN 1 THEN @selectoneCount + 1 
         WHEN 2 THEN @selectoneCount + 1 
        END 

Nếu @temp được thiết lập để không ai trong số những giá trị (1 hoặc 2), sau đó bạn sẽ nhận lại một NULL

+0

Tanx cho câu trả lời ur, tôi nghĩ 'case' trong sqlserver có thể hoạt động cùng một switch- trường hợp trong C# $ ( –

+0

sử dụng 'ELSE @ selectoneCount' * nếu * bạn muốn tạo một trường hợp mặc định khi @Temp không phải là 1 hoặc 2 và @selectoneCount không thay đổi .. – woodvi

3

Đây là câu lệnh chọn, vì vậy mỗi nhánh của vụ án phải trả về một cái gì đó. Nếu bạn muốn thực hiện các hành động, chỉ cần sử dụng một if.

2
select 
     @selectoneCount = case @Temp 
     when 1 then (@selectoneCount+1) 
     when 2 then (@selectoneCount+1) 
     end 

    select @selectoneCount 
1

Thực ra tôi đang nhận được giá trị trả về từ một sp khác thành @temp và sau đó nó @temp = 1 thì tôi muốn tính số @SelectoneCount 1 và cứ thế. Vui lòng cho tôi biết cú pháp chính xác là gì.

Có gì sai với:

IF @Temp = 1 --Or @Temp = 2 also? 
BEGIN 
    SET @SelectoneCount = @SelectoneCount + 1 
END 

(Mặc dù điều này không reek trở về thủ tục mã - không thường là cách tốt nhất để sử dụng SQL)

+1

không có gì sai nếu tôi có 15-20 điều kiện vì vậy tôi muốn sử dụng chuyển đổi có –

+1

@RamSingh - không có chuyển đổi * tuyên bố * trong ngôn ngữ SQL. Như những người khác đã chỉ ra, bạn có thể sử dụng một biểu thức 'CASE' * *, nhưng nó phải tính toán và trả về một giá trị vô hướng. –

+1

ok cảm ơn bạn, nó có nghĩa là tôi phải sử dụng nếu khác cho tình hình của tôi. –