Sql Query OrderBy问题

时间:2012-08-06 06:57:24

标签: sql-server

当我尝试运行以下查询时

DECLARE @QUERY1 VARCHAR(MAX)
SET @QUERY1=(SELECT [ResponsibleEngineerID],[ResponsibleEngineer],DocType
FROM tblResponsibleEngineer 
WHERE ResponsibleEngineer NOT IN ('(Select a Responsible Engineer...)')
ORDER BY [ResponsibleEngineer] ASC
)
EXEC(@QUERY1)

我收到错误

  

ORDER BY子句在视图,内联函数中派生无效   表,子查询和公用表表达式,除非TOP或FOR   还指定了XML。

为什么会出现此错误?我需要完全按照上面的格式编写sql查询。比如将查询分配给变量然后执行

3 个答案:

答案 0 :(得分:0)

试试这个:

  DECLARE @QUERY1 VARCHAR(MAX)

    SET @QUERY1='SELECT [ResponsibleEngineerID],[ResponsibleEngineer],DocType
    FROM tblResponsibleEngineer 
    WHERE REPLACE(Responsible Engineer,'''','''''') NOT IN (Select a REPLACE(Responsible   Engineer,'''','''''')...)
    ORDER BY [ResponsibleEngineer] ASC'

    EXEC(@QUERY1)

答案 1 :(得分:0)

您将查询的结果分配给@ QUERY1,而不是实际的查询文本。

据我所知,这就是你想要的;

DECLARE @QUERY1 VARCHAR(MAX)

SET @QUERY1='SELECT [ResponsibleEngineerID],[ResponsibleEngineer],DocType
FROM tblResponsibleEngineer 
WHERE ResponsibleEngineer NOT IN (Select a Responsible Engineer...)
ORDER BY [ResponsibleEngineer] ASC'

EXEC(@QUERY1)

答案 2 :(得分:0)

您没有将查询分配给变量然后执行它 - 您正在执行查询并尝试将该查询的结果分配给变量。

如果您的查询未包含子查询的非法表达式,则您收到有关返回多列的子查询的错误。

声明变量:

DECLARE @QUERY1 VARCHAR(MAX)

将查询结果分配给变量:

SET @QUERY1=(SELECT [ResponsibleEngineerID],[ResponsibleEngineer],DocType
FROM tblResponsibleEngineer 
WHERE ResponsibleEngineer NOT IN ('(Select a Responsible Engineer...)')
ORDER BY [ResponsibleEngineer] ASC
)

你可能打算做什么:

DECLARE @QUERY1 VARCHAR(MAX)

SET @QUERY1='SELECT [ResponsibleEngineerID],[ResponsibleEngineer],DocType
FROM tblResponsibleEngineer 
WHERE ResponsibleEngineer NOT IN (''(Select a Responsible Engineer...)'')
ORDER BY [ResponsibleEngineer] ASC'

EXEC(@QUERY1)

(请注意,我现在将字符串中的引号加倍)