2009-07-21 5 views
2

덕분에 나는이테이블 함수에서 "DECLARE"를 사용할 수 없습니까? 당신의 메시지를

ALTER FUNCTION [VEZNE].[fnMakbuzIslemGetir] 
     ( 
       @refNo  as int  
     ) 

RETURNS @tablename TABLE (kontrol1 char(1),key0 numeric(18,0) ,tarih datetime ,hizkod char(12),hizad char(75),ytlhizfiyat decimal(18,2) ,hizmiktar numeric(18,2),ytlhiztutar decimal(18,2)) 
     AS 
     BEGIN 

      DECLARE @durum  AS VARCHAR 
      DECLARE @hastaTuru AS VARCHAR 
      DECLARE @makTipi AS VARCHAR 

      SET @durum  = (SELECT durum FROM TH_RefKart WHERE RefNo = @refNo) 
      SET @hastaturu = (SELECT HastaTuru FROM TH_Dosya WHERE DosyaNo in (SELECT DosyaNo FROM TH_RefKart WHERE RefNo = @refNo)) 
      SET @makTipi = (SELECT maktipi FROM TH_Islem WHERE refNo = @refNo) 

      IF ((@hastaTuru = 'Ücretli') AND (@durum = 'AYAKTA')) OR @makTipi = '0' 
      BEGIN 
       INSERT @tablename SELECT kontrol1, key0, tarih, hizkod, hizad, ytlhizfiyat, hizmiktar, ytlhiztutar 
       FROM TH_Islem 
       WHERE refno= @refNo and DekontNo = '0' and anahtar<> -1 
      END 

     RETURN 

     END 

처럼 내 문제를 해결하지만,이 선택은 다중 행 값을 반환하기 때문에 지금은이 행

SET @makTipi = (SELECT maktipi FROM TH_Islem WHERE refNo = @refNo) 

에서 또 다른 문제가있다. 내가 지금 무엇을 할 수 있을까?

+0

어떤 RDBMS를 사용하고 있습니까? – Welbog

+0

내가 마이크로 소프트 SQL Server Management Studio를 사용 \t \t \t \t \t \t 10.0.1600.22 ((SQL_PreRelease) 0.080709-1414) 마이크로 소프트 분석 서비스 클라이언트 도구 \t \t \t \t \t \t 2007.0100.1600.022 ((SQL_PreRelease) .080709- 1414) Microsoft 데이터 액세스 구성 요소 (MDAC) \t \t \t \t \t \t 2000.085.1132.00 (xpsp.080413-0852) 마이크로 소프트 MSXML \t \t \t \t \t \t 2.6 3.0 4.0 5.0 6.0 마이크로 소프트 인터넷 익스플로러 \t \t \t \t \t \t 8.0.6001.18702 마이크로 소프트 .NET 프레임 워크 \t \t \t \t \t \t 2.0.50727.3082 운영 체제 \t \t \t \t \t \t 5.1.2600 – Rapunzo

답변

1

좋아요, 그래서 (SELECT maktipi FROM TH_Islem WHERE refNo = @refNo)는 여러 값을 반환합니다. 이제 무엇을하고 싶은지에 따라 달라집니다. 당신이 원한다면 그래서 그 결과의 최대 값은 사용

(SELECT MAX(maktipi) FROM TH_Islem WHERE refNo = @refNo) 

또는 MIN :

(SELECT MIN(maktipi) FROM TH_Islem WHERE refNo = @refNo) 

또는 @makTipi로

뭔가를 확인하기 위해 나중에 사용되는, 어쩌면 당신이 모든을 유지하고 싶어 값이 반환되었습니다. 이 경우 @makTipi를 테이블로 변경하고 리턴 된 모든 값 (SELECT maktipi FROM TH_Islem WHERE refNo = @refNo)을 삽입해야합니다. 예를 들면 : 다음

DECLARE @makTipi TABLE(columName AS VARCHAR) 
INSERT @makTipi SELECT maktipi FROM TH_Islem WHERE refNo = @refNo 

나중에 당신이 어디에 :

IF ((@hastaTuru = 'Ücretli') AND (@durum = 'AYAKTA')) OR @makTipi = '0' 

변경이에 :이 도움이

IF ((@hastaTuru = 'Ücretli') AND (@durum = 'AYAKTA')) OR EXISTS (SELECT * FROM @makTipi WHERE columnName = '0') 

희망!

+0

대단히 감사 합니다이 솔루션은 내 문제를 해결 – Rapunzo

3

이 시도 : 모든 열이 가정

CREATE FUNCTION [dbo].[fnMakbuzIslem] 
( 
     @refNo  as int  
) 

RETURNS @tablename TABLE (kontrol1 INT,key0 INT ,tarih INT ,hizkod INT,hizad INT,ytlhizfiyat INT,hizmiktar INT,ytlhiztutar INT) 
AS 
BEGIN 

DECLARE @durum  AS VARCHAR = (SELECT durum FROM TH_RefKart WHERE RefNo = @refNo) 
DECLARE @hastaTuru AS VARCHAR = (SELECT HastaTuru FROM TH_Dosya WHERE DosyaNo in (SELECT DosyaNo FROM TH_RefKart WHERE RefNo = @refNo)) 
DECLARE @makTipi AS VARCHAR = (SELECT maktipi FROM TH_Islem WHERE refNo = @refNo) 

IF ((@hastaTuru = 'Ücretli') AND (@durum <> 'AYAKTA')) OR @makTipi = '0' 
BEGIN 
     INSERT @tablename SELECT kontrol1,key0,tarih,hizkod,hizad,ytlhizfiyat,hizmiktar,ytlhiztutar 
     FROM TH_Islem 
     WHERE refno= @refNo and DekontNo = '0' and anahtar<> -1 
END 

RETURN 

END 
GO 

사용자의 요구에 맞게 INT의, 변경 될 수 있습니다.

+3

옳은.나는 OP에 "다중 문장 테이블 값 함수"가 필요 하겠지만, 그는 "인라인 테이블 값 함수"를 사용하여 좀더 자세히 설명하려고한다. – gbn

+0

추가 된 설명에 감사드립니다! – Brian