Click here to Skip to main content
15,890,438 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

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))"
...
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

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