代码之家  ›  专栏  ›  技术社区  ›  KontrCode

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

  •  1
  • KontrCode  · 技术社区  · 7 年前

    我正在SQL Server 2008上使用动态SQL从行中选择指定的列,但始终出现以下错误:

    对象名称“Form”无效

    我的代码如下:

    DECLARE @SQL varchar(MAX)
    
    SET @SQL = 'select 
    [City],[Place]'
    +
    '
    from Form where [Age:] =  20'
    
    EXEC (@SQL)
    

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

    正如我之前检查的 examples ,人们能够以相同的方式从表中选择列,而不会出现错误,那么我得到错误的原因是什么呢?我应该使用 @QUOTENAME 有什么功能吗?

    我们将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Raj    7 年前

    尝试下面的查询,如果仍然出现错误,请首先检查基本内容。

    DECLARE @SQL varchar(MAX)
    SET @SQL = 'select [City],[Place] from [Form] where [Age] =  20'
    EXEC (@SQL)
    
    1. Is表格 [Form] 是否存在于数据库中?
    2. 您是否在正确的数据库中运行?
    3. 我明白了 ":" 过了几岁,那是以上校的名义吗?
    4. 如果Age是varchar,请尝试在20之前和之后添加“'”。
        2
  •  1
  •   Zorkolot    7 年前

    你描述 @table 。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)