动态SQL - 无效的对象名称错误

时间:2018-03-15 06:32:46

标签: sql sql-server sql-server-2008

我在SQL Server 2008上使用动态SQL从一行中选择指定的列,但我不断收到以下错误:

  

无效的对象名称“表单”

我的代码如下:

DECLARE @SQL varchar(MAX)

SET @SQL = 'select 
[City],[Place]'
+
'
from Form where [Age:] =  20'

EXEC (@SQL)

我也尝试使用+ QUOTENAME(@Table)并将@Table声明为nvarchar(MAX),但无法定义@Table基本上是我数据库中的Form表。

当我检查上一个examples时,人们能够以相同的方式从表中选择列而不会出错,那么我得到错误的原因是什么?我应该使用@QUOTENAME功能吗?

帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

尝试以下查询,如果您仍然首先检查错误,请先查看基本信息。

DECLARE @SQL varchar(MAX)
SET @SQL = 'select [City],[Place] from [Form] where [Age] =  20'
EXEC (@SQL)
  1. 数据库中是否存在表[Form]
  2. 您是否使用正确的数据库运行?
  3. 我看到AGE之后的":"是col name吗?
  4. 如果Age是varchar,请尝试在20之前和之后添加“'”。

答案 1 :(得分:1)

您描述@table。表是保留关键字,因此不使用该字是一种很好的做法。让我们假设@mytable是一个包含查询表名的变量。在这种情况下,您可以像使用字符串的其余部分一样进行连接。 您还需要连接到您尝试查询的数据库。

例如:

DECLARE @SQL varchar(MAX)
DECLARE @mytable varchar(1000) = 'Form' --put the table name here

SET @SQL = 'select [City], [Place] '
         + 'from ' + @mytable + ' where [Age:] =  20'

EXEC (@SQL)