Click here to Skip to main content
15,899,935 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello Everybody,

Problem in below query:
SQL
DECLARE @First_CName  VARCHAR(50)

SET @First_CName='Source_Id'

SELECT * FROM SourceDest_Details WHERE @First_CName =CAST(45 AS VARCHAR(50))--- This query is not working

But,
SQL
SELECT * FROM SourceDest_Details WHERE Source_Id=45-- This Query is Working

May i know the reason and if there is any possibility for first query to work
Posted
Updated 4-Apr-14 21:52pm
v2

if you are supposed to use dynamic variables like @First_CName in where clause you have to surely use dynamic T_SQL

DECLARE @First_CName VARCHAR(50),
@lssql nvarchar(100)=''
SET @First_CName='Source_Id'
set @lssql='SELECT * FROM SourceDest_Details WHERE ('+@First_CName+'=CAST(''45'' AS VARCHAR(50)))'
print @lssql
execute sp_executesql @lssql
 
Share this answer
 
v2
try this
SQL
DECLARE @First_CName  VARCHAR(50)
SET @First_CName='Source_Id'
DECLARE @SQL varchar(1000)
SET @SQL = 'SELECT * FROM SourceDest_Details WHERE ('+@First_CName+'=CAST(''45'' AS VARCHAR(50)))'
EXEC(@SQL)
 
Share this answer
 
Comments
Member 10017719 5-Apr-14 5:30am    
Thank you Schatak...gr8
Schatak 5-Apr-14 5:35am    
Your welcome :)
Er. Puneet Goel 5-Apr-14 7:14am    
Whola!! Magical answer
Tom Marvolo Riddle 5-Apr-14 9:15am    
Good one +5!
Schatak 8-Apr-14 8:55am    
:)
You cannot dynamically change the structure of an SQL statement like that using variable contents.

If you need the statement to be dynamic, have a look at sp_executesql[^]
 
Share this answer
 
Comments
Member 10017719 5-Apr-14 4:10am    
Ya I have tried with dynamic sql also as follows

SELECT TOP 1 @First_CName=COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@Table_Name

SET @From_Value=CAST(@fromId AS VARCHAR(50))
SET @To_Value=CAST(@toId AS VARCHAR(50))

SELECT @SQL='SELECT * FROM ' +@Table_Name+ ' WHERE '+ @First_CName +' BETWEEN CAST(' +@From_Value+' AS INT) AND CAST(' +@To_Value+ ' AS INT)'-- ex: @fromId=45 and @toId=46(inputs)

EXEC sp_executesql @SQL


Its returning error:The parameters supplied for the batch are not valid.
Wendelius 5-Apr-14 4:24am    
When using dynamic SQL you have to concatenate the columns from the variables to the statement. For example:
...
SET @From_Value="CAST(" + @VarContainingColName + " AS VARCHAR(50))"
...

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900