字'DECLARE'附近的语法错误

问题描述:

由于某些原因,我总是收到错误'DECLARE'附近的错误语法''。我应该在哪里声明我的变量,以便它不会抛出错误?我还没有弄清楚这一点,因为我没有找到使用'WITH AS'语句的人,并且试图声明一个变量。字'DECLARE'附近的语法错误

CREATE PROCEDURE qryKeysValues(@KeyValue varchar(5)) 
    AS 
    BEGIN 
    WITH tbl1 AS  
     (SELECT * FROM FN_qryMethods()) 

    DECLARE @SQL varchar(1500) 
    SET @SQL = 'SELECT ' + @KeyValue+ ' AS fldCode, tbl' [email protected]+ 'Key.fldID, tbl1.fldID 
       FROM tbl' + @KeyValue + 'Key', tbl1 
     EXEC(@SQL) 
    END; 
+0

* A CTE必须跟一个SELECT,INSERT,UPDATE,MERGE或DELETE语句* - 目前还不清楚是什么你正在尝试做的...... –

+0

可以前'WITH'声明你的变量声明。我会用一个例子来帮助你,但是你很难完成你的整个查询。我没有看到你在任何地方使用'tbl1',并且你的动态sql看起来很乱(打开和关闭撇号的数目不正确)。 –

+0

抱歉纠正了这些问题。我只是试图声明@SQL字符串,然后能够执行它,我遇到的问题是放置变量声明的位置(如果可能的话)。 – codingManiac

With语句采用结构:

WITH CTE_Name 
AS 
(
    Select column from table 
) 
Select column from CTE_Name 

你不能把Declare你在哪里把它。允许的值为SELECTINSERT,UPDATE,DELETEMERGE(contrib @alex k)。

也许像这样的东西是你在找什么?

CREATE PROCEDURE qryKeysValues(@KeyValue varchar(5)) 
AS 
BEGIN 

    DECLARE @SQL varchar(1500); 

    SELECT * INTO #tbl1 FROM FN_qryMethods(); 

    SET @SQL = 'SELECT ' + @KeyValue+ ' AS fldCode 
       , tbl' [email protected]+ 'Key.fldID 
       , #tbl1.fldID 
       FROM tbl' + @KeyValue + 'Key, #tbl1'; 

    EXEC(@SQL); 
END; 
+0

这很好,我现在唯一的问题是当我调用过程时为@KeyValue变量赋值。当我尝试执行'exec qryKeysValues('Ab')'时,它会给我一个'无效列名'的错误。我不知道为什么变量指向一个列,我需要帮助的是传递一个值给过程,如果我传递了qryKeyValues('Ab')例如,我希望SQL字符串说... SELECT Ab AS fldCode,tblAbKey.fldID,#tbl1.fldID FROM tblAbKey,#tbl1; – codingManiac

+0

@tripleddev它的工作原理与您在上一个示例中所写的完全相同。从表'tblAbKey'选择一个列'ab'?你想在'fldCode'中写'ab''字符串吗? –

+0

@tripleddev如果答案是肯定的,你应该将varibale设置为'SELECT'''+ @ KeyValue +'''AS fldCode ...' –