2013-11-09 38 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. 如果一切顺利,请恢复存储过程中备份的代码。