2013-10-13 66 views
0

我想写入动态tsql,但系统返回错误'无效列'为什么?无效列错误与动态SQL

DECLARE @WhereClause NVARCHAR(2000) 
DECLARE @SelectStatement NVARCHAR(2000) 
DECLARE @FullStatement NVARCHAR(4000) 

set @WhereClause = 'elad' 
SET @SelectStatement = 'SELECT TOP 1 * FROM elad where ' 
SET @FullStatement = @SelectStatement +'last_name'+'='[email protected] 

EXECUTE sp_executesql @FullStatement 

在此查询我希望系统返回所有的行,去年name字段等于ELAD, 但系统返回:

消息207,级别16,状态1,行
列名'elad'无效。'

+2

你的SQL语句的结果TOP 1 * FROM ELAD WHERE姓氏= elad'因而'WHERE'条款试图比较' last_name“列添加到”elad“列 - 这当然不存在。您需要将字符串文字放入**单引号!** .... –

+0

当您遇到动态查询问题时,请编写正确的* static *版本,更改构建动态查询的脚本以便它**打印**查询,而不是执行它。查看打印结果并与正确的静态版本进行比较。如果你不能解决这个问题,*然后*询问它,告诉我们查询*应该*看起来像什么(不要让我们猜测!)。 –

回答

1

您需要在Where子句中的`选择添加引号

SET @FullStatement = @SelectStatement +'last_name'+'='''[email protected] + '''' 
+2

但是在阅读关于SQL注入之前... –

+0

@GrzegorzGierlik答案严格按照与问题相关的语法错误。当然最好使用'sp_executesql' –