2015-04-30 3 views
0
Declare @cardNumber; 
select name, address, 
(select @cardNumber = select top 1 value from card cd 
     inner join cardNotuse cdnu on cd.id = cdnu.cardId 
     where cdnu.type = 'CreditCard'), 
case when (@cardNumber = 1) then 'TopPriority' 
    when (@cardNumber = 2) then 'SecondPriority' 
    Else 'Normal' end as PriorityLeval 

from customer 

Я не могу присвоить значение @cardNumber каким-то образом. Ошибка у меня естьНазначить переменную в запросе sql

«Неправильный синтаксис рядом с« = ».

Я не мог понять, почему я не мог использовать такой запрос.

+4

Кроме того, не допускается в SQL сервере, чтобы возвращать результат из запроса на выборку, а также присвойте некоторое значение переменной в том же запросе. –

+1

Даже исправление синтаксиса Я сомневаюсь, что запрос делает то, что вы хотите. Каждый символ @cardNumber одинаковый. – Paparazzi

ответ

0

Пожалуйста, проверьте образец и комментарий.

Declare @cardNumber varchar(50) --here datatype missing 

select name, address, 
     (--select @cardNumber = --you can not do 2 thing in one select query, either set variable or get result, not both in a single query 
     select top 1 value from card cd 
     inner join cardNotuse cdnu on cd.id = cdnu.cardId 
     where cdnu.type = 'CreditCard' 
     ), 
case when (@cardNumber = 1) then 'TopPriority' 
    when (@cardNumber = 2) then 'SecondPriority' 
    Else 'Normal' end as PriorityLeval 

from customer 

--1. Either set statment to get value 
set @cardNumber = 
     (select top 1 value from card cd 
     inner join cardNotuse cdnu on cd.id = cdnu.cardId 
     where cdnu.type = 'CreditCard' 
     ) 
--2. or in select query you can set,but result always be a single value as you taken top 1 will not work for you. 
select @cardNumber = --this gives error as top clause will not work 
     top 1 value from card cd 
     inner join cardNotuse cdnu on cd.id = cdnu.cardId 
     where cdnu.type = 'CreditCard' 

--This will work. If a single value there, it return a value. If more than one value, set last record. 
select @cardNumber = value _Id from card cd 
      inner join cardNotuse cdnu on cd.id = cdnu.cardId 
      where cdnu.type = 'CreditCard' 
+0

'select @cardNumber = top 1 значение из карты cd' недопустимый оператор SQL Server. 'select top 1 @cardNumber = value from card cd' –

+0

Спасибо @DeepakPawar .. Я изменил свой ответ .. – Ajay2707

1

Как переменная @cardNumber не связана с таблицей клиентов вы можете написать два независимых запросов AS:

Declare @cardNumber int; 
set @cardNumber = (SELECT top 1 value 
         from card cd 
         inner join cardNotuse cdnu on cd.id = cdnu.cardId 
         where cdnu.[type] = 'CreditCard') 
select name, 
     address, 
     @cardNumber, 
     case when (@cardNumber = 1) then 'TopPriority' 
      when (@cardNumber = 2) then 'SecondPriority' 
      Else 'Normal' end as PriorityLeval 
from customer 
Смежные вопросы