Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 EXECUTESQL错误_Sql Server 2008_Sp Executesql - Fatal编程技术网

Sql server 2008 EXECUTESQL错误

Sql server 2008 EXECUTESQL错误,sql-server-2008,sp-executesql,Sql Server 2008,Sp Executesql,下面是我试图在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''

下面是我试图在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
当我试着运行这个时,它错误地说

“keywor'as'附近的语法不正确”


我取出这段代码并单独执行,它没有出错。我在这里遗漏了什么吗?

看起来像是在过程的参数周围遗漏了括号

您可以使用的一个技巧是打印sql语句,然后尝试运行该语句-错误消息可能会提供更多信息

print @STRING

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

UNPIVOT(…FOR…IN(…)
作为…

where...conditions 
PIVOT(…FOR…IN(…)
作为…

where...conditions 
这不会通过语法检查。如果您已经删除了实际情况,则可能是这就是您的错误所在。以及:

dbo.Table1 join dbo.Table2 
没有ON条款


我通过对print@string的结果进行语法检查看到了这两个问题,这是找到问题的第一步。我仍然说,根据您给我们的信息,根本没有理由使用动态SQl,如果您不需要动态SQl,那么使用动态SQl是一种糟糕的做法

我已经这么做了,我找不到任何地方可能会漏掉括号……否则,如果没有SP_EXECUTESQL,这根本不会执行。参数列表中不需要括号。哦-我总是使用括号-我猜我把编码标准误认为是语法要求:)当您在没有SP_EXECUTESQL的情况下运行文本时,它会给您错误的行号吗?就像我说的,当我在没有单引号和SP_EXECUTESQL的情况下运行该过程时,它不会出错并成功完成。只有当我试图通过EXECUTESQL创建proc时,它才会出错。您正在运行的代码中是否仍有
…条件,或者您是否更改了这些条件以在此处发布?另外,如果您想将
@EndingRange
计算为12*13,则不应将其放在引号中。我已经考虑了引号。这是我试图运行的直接复制粘贴,是的,…条件是为了发布而故意设置的。为什么你不只是运行代码?我看不出为什么需要使用动态SQL。我已经更新了答案,以显示需要结束段落的两个位置。我添加了结束段落,现在它在另一行上给了我一个错误。我会尽可能地调试它。