2013-11-09 34 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工作,但我不得不在LINQ to SQL類類似的情況。

  1. 備份您的存儲過程的代碼
  2. 創建一個單一的SELECT聲明中使用適當的值,在你的存儲過程如下所示:

    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 
    
  3. 導入此存儲過程中的EF

  4. 如果一切順利,請恢復存儲過程中備份的代碼。