2013-11-09 3 views
1

SQL Server에서 동적 쿼리를 작성하려고했습니다. 그러나 나는SQL Server : 동적 쿼리에서 저장 프로 시저

, 아래와 같이 [선택한 저장 프로 시저를 경고받을 또는 함수 내가이 그러나 여전히 실행되지 않습니다 달성하기 위해 노력 해왔다 더 열

을 반환하지 않습니다.

나는 어디에서 그리웠습니까?

ALTER PROCEDURE [dbo].[S_ProjeGetir1] 
@ID   int=0, 
@AktifMi  int, 
@ProjeFirma int, 
@Icinde  int, 
@AramaText Varchar(500), 
@Arasinda1 Varchar(50), 
@Arasinda2 Varchar(50) 
AS 
BEGIN 
Create Table #TempTable 
(Sonuc int 
,ID int   
,FirmaID int 
,PrismProjeID int 
,ProjeAdi nvarchar(150) 
,RgID uniqueidentifier 
,HaritaEnlem nvarchar(25) 
,HaritaBoylam nvarchar(25) 
,ProjeTeslimTarihi datetime 
,HemenTeslimMi bit 
,Adres nvarchar(250) 
,AdresUlkeID int 
,AdresILID int 
,AdresILceID int 
,AdresSemtID int 
,KonutSayisi int 
,LansmanTarihi datetime 
,OfisSayisi int 
,MagazaSayisi int 
,BlokSayisi int 
,YesilAlan int 
,KrediyeUygunMu bit 
,AktifMi bit 
,UcBoyutVarMi bit 
,UlkeAdi nvarchar(150) 
,Sehir nvarchar(50) 
,Ilce nvarchar(50) 
,Semt nvarchar(50) 
,FirmaAdi nvarchar(100) 
,StokSonGuncellemeTarihi datetime) 

    Declare @SqlText varchar(8000), 
      @AktifPasif bit 
    Set @AktifPasif=Case When @AktifMi=0 Then 1 When @AktifMi=1 Then 0 End 
    SET NOCOUNT ON 
    BEGIN TRY 

     Set @SqlText=' SELECT 1 Sonuc ,[ID],[FirmaID] ,[PrismProjeID],[ProjeAdi] ,[RgID]  ,[HaritaEnlem] ,[HaritaBoylam] ,[ProjeTeslimTarihi] 
             ,[HemenTeslimMi],[Adres]  ,[AdresUlkeID] ,[AdresILID] ,[AdresILceID] ,[AdresSemtID] ,[KonutSayisi] 
             ,[LansmanTarihi],[OfisSayisi] ,[MagazaSayisi],[BlokSayisi],[YesilAlan] ,[KrediyeUygunMu],[AktifMi] 
             ,[UcBoyutVarMi] ,[UlkeAdi]  ,[Sehir]  ,[Ilce]  ,[Semt] 
             ,[FirmaAdi]  ,[StokSonGuncellemeTarihi] 
         FROM [dbo].[V_Proje] AS P WITH (NOLOCK) 
         WHERE 1=1 ' 
     If @ID>0 Set --ID ye Göre İlgili Kayıdı almak için 
      @[email protected] +' and ID=' +cast(@ID as Varchar(50)) 
     Else 
     Begin 
      --Aktif ise veya Pasif ise    
      if @AktifMi=0 or @AktifMi=1 
      Begin 
       Set @[email protected] +' and AktifMi='+cast(@AktifPasif as varchar(50)) 
      End 
      --Bütün Alanları sorgulamak için 
       Set @[email protected] +' and CASE WHEN '+cast(@ProjeFirma as varchar(50))+'=1 THEN Upper(ProjeAdi) 
               WHEN '+cast(@ProjeFirma as varchar(50))+'=0 THEN Upper(FirmaAdi) 
               WHEN '+cast(@ProjeFirma as varchar(50))+'=2 THEN Upper(HaritaEnlem) 
               WHEN '+cast(@ProjeFirma as varchar(50))+'=3 THEN Upper(HaritaBoylam) 
               WHEN '+cast(@ProjeFirma as varchar(50))+'=4 THEN Upper(Adres)' 

      If @Icinde=0--İçinde            
       Set @[email protected] +' END Like ''%'[email protected]+'%'' ' 
      If @Icinde=1--İle Başlayan 
       Set @[email protected] +' END Like '''[email protected]+'%'' ' 
      If @Icinde=2--Arasında 
       Set @[email protected] +' END between '''+ @Arasinda1+''' and '''[email protected]+'''' 
      --select @SQLTEXT 
     End 
     exec('insert into #TempTable ' + @SqlText) 



     Select  Sonuc, [ID],[FirmaID],[PrismProjeID],[ProjeAdi] ,[RgID]   ,[HaritaEnlem],[HaritaBoylam],[ProjeTeslimTarihi],[HemenTeslimMi] 
         ,[Adres]  ,[AdresUlkeID] ,[AdresILID],[AdresILceID] ,[AdresSemtID],[KonutSayisi] ,[LansmanTarihi] ,[OfisSayisi] 
         ,[MagazaSayisi],[BlokSayisi] ,[YesilAlan],[KrediyeUygunMu],[AktifMi] ,[UcBoyutVarMi],[UlkeAdi],[Sehir] ,[Ilce],[Semt] 
         ,[FirmaAdi] ,[StokSonGuncellemeTarihi] 
     From #TempTable AS T WITH (NOLOCK) 

    END TRY 
    BEGIN CATCH 
     SELECT -1 AS Sonuc -- EXCEPTION 
    END CATCH 
    SET NOCOUNT OFF 
END 

도움이 되겠습니다.

감사

+0

가능한 중복 [EF4 - 선택한 저장 프로 시저가 열을 반환하지 않음] (http://stackoverflow.com/questions/7128747/ef4-the-selected-stored-procedure-returns-no-columns) –

답변

0

내가 EF 위해 일할 것입니다 말하기 위하여려고하고있는 무슨 있는지 확실하지 않습니다,하지만 난 SQL 클래스에 LINQ에서 비슷한 사건이 있었다.

  1. 백업하여 저장 프로 시저의 코드
  2. 다음과 같은 저장 프로 시저에 적절한 값으로 하나의 SELECT 문 작성 :이 EF

  3. 에 저장 프로 시저를

    ALTER PROCEDURE [dbo].[S_ProjeGetir1] 
        @ID   int=0, 
        @AktifMi  int, 
        @ProjeFirma int, 
        @Icinde  int, 
        @AramaText Varchar(500), 
        @Arasinda1 Varchar(50), 
        @Arasinda2 Varchar(50) 
    AS 
    BEGIN 
    
        Select CONVERT(VARCHAR(30),'') AS Sonuc, -- Make sure to convert to what your 
          0 AS [ID], 
          0 AS [FirmaID], 
          0 AS [PrismProjeID], 
          ... 
    END 
    
  4. 가져 오기를

  5. 모두 문제가 해결되지 않으면 저장 프로 시저에서 백업 된 코드를 복원하십시오.