2013-11-09 4 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 к классам 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. Если все пойдет хорошо, восстановите резервный код в Хранимой процедуре.
Смежные вопросы