EXECUTESQL error



下面是我试图在SQL Server上执行的一段代码。

DECLARE @string NVARCHAR(MAX) = '
    CREATE PROC [dbo].[Trend]
    @slsID NVARCHAR(20)
    AS
    BEGIN
    SET NOCOUNT ON
    DECLARE @BeginningRange varchar(20),
    @EndingRange varchar(20)
    SET @EndingRange = ''12*13''
    SET @BeginningRange = ''12*02''
    ;WITH CTE1 AS(
             SELECT 
             dbo.Field1,dbo.Field2,dbo.Field3
             FROM dbo.Table1 join dbo.Table2 where...conditions
             weekNum BETWEEN (@BeginningRange) AND (@EndingRange)
                 )
    SELECT * FROM CTE1 
    UNPIVOT
      ( numbers for type in (Field1, Field2, Field3, Field4)
      ) as p PIVOT
      (
      Sum(numbers) for
      WeekNum in ([12*02],[12*03],[12*04],[12*05],[12*06],[12*07],[12*08],[12*09],[12*10],                                                         [12*11],[12*12],[12*13])
      ) as q
      END
'
    EXECUTE SP_EXECUTESQL @STRING

当我尝试运行这个时,它错误地说

"关键字"as"附近的语法不正确"

我把这个代码拿出来单独执行,它没有出错。我是不是遗漏了什么?

过程的参数周围看起来缺少括号。

你可以使用的一个技巧是打印出sql语句,然后尝试运行它——错误消息可能会给你更多的信息

print @STRING

PIVOT和UNPIVOT子句都需要两个右括号。

UNPIVOT (... FOR ... IN (...))AS ...

PIVOT (... FOR ... IN (...))AS ...

where...conditions 

这不会通过语法检查。如果你已经删除了实际情况,这可能是你的错误所在

dbo.Table1 join dbo.Table2 

没有ON条款

我通过对print@string的结果进行语法检查看到了这两种情况,这是您应该采取的第一步来发现问题。我仍然认为,根据您给我们的信息,根本没有理由使用动态SQl,如果您不需要,使用动态SQl是一种糟糕的做法。

相关内容

  • 没有找到相关文章

最新更新