2017-05-09 12 views
0

나는 작업이 간단한 쿼리를 미세 (내 실제 쿼리가, 난 그냥 예로서이 일을 만들어 훨씬 더 복잡 이것보다) :쿼리는 독립적으로 잘 작동하지만, 기능을 사용할 때 오류를 제공

select mc_id, mc_referencia 
from movcuentas1 
where tm_id = 1 and mc_concepto = 'Amort Int' 
UNION 
select mc_id, mc_referencia 
from movcuentas2 
where tm_id = 2 and mc_concepto = 'Amort Capital' 
order by mc_referencia 

하지만 이와 같은 함수 내에서 사용하려고 :

USE [dozfin] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER FUNCTION [dbo].[SampleF] (@mes as integer, @anio as integer) 
RETURNS TABLE 
AS 
RETURN 
(
select mc_id, mc_referencia 
from movcuentas 
where tm_id = 1 and mc_concepto = 'Amort Int' 
UNION 
select mc_id, mc_referencia 
from movcuentas 
where tm_id = 2 and mc_concepto = 'Amort Capital' 
order by mc_referencia 
) 

저장 트링, 그것은 나에게이 오류 제공합니다 "메시지 1033, 수준 15, 상태 1, 프로 시저 SampleF, 라인 (15) ORDER BY 절이 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블에서 유효하지 않습니다. 표현식은 TOP 또는 FOR XML도 지정되지 않은 한. "

아이디어가 있으십니까?

+1

함수를 사용할 때'ORDER BY'를 쓰면 안됩니다 :'SELECT * FROM [dbo]. [SampleF] (1,2017) ORDER BY mc_referencia' 또는 이와 비슷한 것 – Lamak

+0

당신의 기능에서 오히려 무의미합니다. 이 쿼리를 사용하는 쿼리가이 순서대로 반환된다는 것을 의미하지는 않습니다. 결과를 주문하려면 최종 쿼리에 있어야합니다. 이에 대한 해결 방법은 없습니다. –

+0

당신이 맞습니다. 단지 최종 쿼리를 수정하기위한 소스 코드에 대한 액세스 권한이 없습니다. 내가 해결 방법을 찾고 있어요. 도와 줘서 고마워. –

답변

1

메시지 오류가 분명합니다. ORDER BY가있는 문장에 TOP 절을 추가하십시오.

ALTER FUNCTION [dbo].[SampleF] (@mes as integer, @anio as integer) 
RETURNS TABLE 
AS 
RETURN 
(
    select mc_id, mc_referencia 
    from movcuentas 
    where tm_id = 1 and mc_concepto = 'Amort Int' 
    UNION 
    select top 100 percent mc_id, mc_referencia 
    from movcuentas 
    where tm_id = 2 and mc_concepto = 'Amort Capital' 
    order by mc_referencia 
) 

그냥 샘플

create table foo (id int identity, val int); 
insert into foo values (1),(2),(3),(4); 
create function dbo.test(@id int) 
returns table 
as 
return 
    select id, val from foo where id = @id 
    union 
    select top 100 percent id, val from foo where id > 3 order by val desc; 

GO 
select * from dbo.test(2); 
GO 
 
id | val 
-: | --: 
2 | 2 
4 | 4 

dbfiddle here

+1

함수에'ORDER BY'를 추가하는 요점은 무엇입니까? 'TOP100' 해킹은 의미가 없습니다. –