0
나는이 저장 프로 시저가 있습니다SQL 서버의 if..else는 Windows 응용 프로그램에 표시되지 않습니다
exec sp_Defect_B '2013-05-20 00:00:00','2013-05-25 23:59:59'
다른 것은 주어진 코드에 따라 실행하기 IF..ELSE
있습니다
alter proc [dbo].[p_Defect_B] (@dtFrom datetime, @dtTo datetime)
as
begin
DECLARE @Total TABLE
(
[No] int, TSampel float
)
-- Total
insert into @Total
select 1 as [No], SUM(H.Total) as TSampel from TrxDBHHDr HH
left join TrxDBHdr H on HH.DBNO=H.DBNO
left join ProductType PT on H.ACd=PT.ACd and PT.GCd=1
where HH.Deleted=0 and HH.DBDate between @dtFrom and @dtTo
DECLARE @Defect TABLE
(
DefectCd varchar(15),Name varchar(50), Defect float
)
-- Defect
insert into @Defect
select D.DefectCd,DB.Name,sum(coalesce(D.Qty,0)) as Defect from TrxDBHHDr HH
left join TrxDBDtl D on HH.DBNO=D.DBNO
left join ProductType PT on D.acd=PT.ACd and PT.GCd=1
left join DefectBK DB on DB.DefectCd=D.DefectCd
where HH.Deleted=0 and HH.DBDate between @dtFrom and @dtTo
group by D.DefectCd,DB.Name
DECLARE @SubTotal TABLE
(
Name varchar(50), Defect float, TSampel float, PDefect float
)
insert into @SubTotal
select D.Name,D.Defect,T.TSampel,D.Defect*100/T.TSampel as PDefect from @Defect D
left join @Total T on T.[No]=1
order by PDefect desc
DECLARE @TotalD TABLE
(
[No] int,Defect float
)
insert into @TotalD
select 1, Sum(D.Defect) as Defect from @Defect D
insert into @SubTotal
select 'Total Defect', D.Defect, T.TSampel, D.Defect*100/T.TSampel as PDefect from @TotalD D
left join @Total T on T.[No]=1
select * from @SubTotal
end
I을 SSMS에서 코드를 실행하면 완벽하게 작동합니다. 그러나 C# Windows 응용 프로그램에서이 코드를 사용하려고하면 아무런 가치가 없습니다 ... 어떻게 가능합니까? 내가 놓친 게 있니?
내가 임시 테이블, 테이블 변수를 사용하여 시도, 그들은 여전히 테이블 값을 반환하지 않았습니다 만이 저장 프로 시저가 테이블 값을 반환하지 않았다
는 ... ...
이는 C#입니다 코드 :
sql= "exec p_Defect_B '2013-05-20 00:00:00','2013-05-25 23:59:59'";
RunQuery qu_data = new RunQuery();
DataTable data = new DataTable();
data = qu_data.OpenAdoQuery(sql,"IP")
이 SQL 서버 내 연결 C#을 내 프로그램의 일부입니다
myCon = new OleDbConnection(strCon);
DataTable myData = new DataTable();
myCon.Open();
OleDbDataAdapter myOleAdapter = new OleDbDataAdapter();
myOleAdapter.SelectCommand = new OleDbCommand(sql,myCon);
myOleAdapter.Fill(myData);
myCon.Close();
- 모든 테이블은 SMSS에서 값을 반환합니다.
- 모든 테이블 변수는 SMSS의 결과를 보여줍니다.
- 결과가 ADOAdapter를 사용하는 C# Windows 응용 프로그램에 표시되지 않았습니다.
- 임시 테이블과 테이블 변수를 사용해 보았는데 작동하지 않았습니다.
IF..ELSE
을 사용하지 않으려 고 시도했지만 작동하지 않았습니다.
를 - 그것은 SQL 서버의 시스템 절차에 예약합니다. –
sp_Defect_B를 p_Defect_B로 변경했지만 여전히 프로 시저에서 테이블 값을 catch하지 않았습니다. –
더 나은 세트 기반 접근 방식이 확실한가요? –