[英]SQL Server : passing nullable parameters to a stored procedure with dynamic query
[英]SQL Server : Dynamic Query in Stored Procedure in
我试图在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
任何帮助将不胜感激。
谢谢
我不确定我要说的内容是否适用于EF,但是在LINQ to SQL类中也有类似的情况。
在存储过程中创建一个具有适当值的单个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
将此存储过程导入EF
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.