【问题标题】:incorrect syntax error and object/column name missing不正确的语法错误和缺少对象/列名
【发布时间】:2013-07-08 07:41:46
【问题描述】:

我正在创建一个存储过程,它基本上只执行 1 个动态查询,并将另一个动态查询的结果作为 1 列的别名。 但是,我收到以下两个错误(id 没有说明在哪里):

  1. “=”附近的语法不正确。
  2. 对象或列名丢失或为空。对于 SELECT INTO 语句,验证每一列都有一个名称。对于其他语句,请查找空别名。不允许使用定义为 "" 或 [] 的别名。将别名更改为有效名称。

这是我的代码:

    ALTER PROCEDURE myProcedure
        @param1 NVARCHAR(50),
        @param2 NVARCHAR(50),
        @param3 int
    AS
    BEGIN
        DECLARE @query Nvarchar(2000)
        DECLARE @columnName Nvarchar(250)
        DECLARE @columnNameOUT Nvarchar(250)
        set @columnName = ''
        SELECT @query = 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias FROM TimeStamps WHERE [param3] = ''' + CAST(@param3 AS VARCHAR) + ''' AND param2 = ''' + @param2 + ''' AND [param1] = ''' + @param1 +''''
        EXECUTE sp_executesql @query, N'@columnNameOUT NVARCHAR(30) OUTPUT', @columnNameOUT = @columnName OUTPUT
        set @query = ''
        IF @param1 IS NULL
        BEGIN
            SELECT @query = 'SELECT column1 AS '''+@columnName+''', column2, column3 ETA FROM myTable WHERE [param3] = '''+CAST(@param3 AS VARCHAR) +''' AND param2 = '''+@param2+''' AND [param1] IS NULL order by column1'
        END
        ELSE
        BEGIN
            SELECT @query = 'SELECT column1 AS '''+@columnName+''', column2, column3 ETA FROM myTable WHERE [param3] = '''+CAST(@param3 AS VARCHAR) +''' AND param2 = '''+@param2+''' AND [param1] ) '''+@param1+''' order by column1'
        END
        EXEC(@query);
    END

【问题讨论】:

    标签: sql stored-procedures sql-server-2012 dynamic-sql


    【解决方案1】:

    首先,括号有问题:

    ' AND [param1] ) '
    

    您的第二个问题在 ELSE 语句中(有解决方案):

        BEGIN
            SELECT @query = 'SELECT column1, column2, column3 ETA 
            FROM myTable 
            WHERE [param3] = '''+CAST(@param3 AS VARCHAR) +''' 
            AND [param2] = '''+@param2+''' 
            AND [param1] = '''+@param1+''' order by column1';
        END
    

    但第一个问题看起来像这里,但不知道如何解决它:

    SELECT @query = 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias
    

    希望对你有帮助

    【讨论】:

    • 谢谢,但修复所有这些问题后我仍然遇到同样的错误
    【解决方案2】:

    终于自己解决了!

    原来这个小查询:

    SELECT @query = 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias FROM TimeStamps WHERE [param3] = ''' + CAST(@param3 AS VARCHAR) + ''' AND param2 = ''' + @param2 + ''' AND [param1] = ''' + @param1 +''''
    

    有机会空手而归。所以在添加了IF @columnName = '' 之后,一切都解决了。

    并改变这一行:

    ... 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias FROM ...
    

    到这里:

    ...'SELECT @columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108) FROM...
    

    使另一个错误也消失了:)

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多