Where子句中的问题 [英] Problem in Where Clause

查看:87
本文介绍了Where子句中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hello Everybody,



以下问题中的问题:

Hello Everybody,

Problem in below query:

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,

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

推荐答案

试试这个

try this
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)


您不能像使用变量内容那样动态更改SQL语句的结构。



如果您需要声明是动态的,请查看 sp_executesql [ ^ ]
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[^]


如果你应该在where子句中使用像@First_CName这样的动态变量你一定要使用动态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

执行sp_executesql @lssql
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


这篇关于Where子句中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆