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 

I can't assign value to @cardNumber by somehow. Error I've got is

'Incorrect syntax near '='.

I couldn't figure out why I couldn't use the query like that.

2
  • 4
    Also, it is not permitted in sql server to return result from a select query as well as assign some value in a variable in same query. Commented Apr 30, 2015 at 9:56
  • 1
    Even fixing the syntax I doubt the query does what you want. Every single @cardNumber is the same. Commented Apr 30, 2015 at 10:16

2 Answers 2

1

As variable @cardNumber is not related to customer table you can write two independent queries 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 
Sign up to request clarification or add additional context in comments.

Comments

0

Please check the sample and comment.

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'

1 Comment

select @cardNumber = top 1 value from card cd invalid SQL Server statement. select top 1 @cardNumber = value from card cd

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.