1

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
           @SqlText=@SqlText +' and ID=' +cast(@ID as Varchar(50))
        Else
        Begin
            --Aktif ise veya Pasif ise            
            if @AktifMi=0 or @AktifMi=1
            Begin
              Set @SqlText=@SqlText +' and AktifMi='+cast(@AktifPasif as varchar(50))
            End
            --Bütün Alanları sorgulamak için
              Set @SqlText=@SqlText +' 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 @SqlText=@SqlText +' END Like ''%'+@AramaText+'%''  '
            If @Icinde=1--İle Başlayan
              Set @SqlText=@SqlText +' END Like '''+@AramaText+'%''  '
            If @Icinde=2--Arasında
              Set @SqlText=@SqlText +' END between '''+ @Arasinda1+''' and '''+@Arasinda2+''''
            --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

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

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. すべてがうまくいけば、ストアド プロシージャでバックアップされたコードを復元します。
于 2013-11-11T08:25:50.913 に答える