2014-02-28 3 views
0

T-SQL 저장 프로 시저를 처음 사용하고 저장 프로 시저를 호출하여 ASP 페이지에서 작업하려고합니다. 나는 이것에 대해 어떻게 해야할지 모르겠다. Select 문에 대한 SQL String을 만들거나 모든 선언 변수를 포함해야만 하는가? 아래 선언문과 명세서를 게시했습니다. 도와 줘서 고마워.매개 변수없이 저장 프로 시저 호출 C#

DECLARE @CasesPerHour decimal(18,2); 

Declarations 
DECLARE @Line1Start datetime; 
DECLARE @Line1Breaks decimal(10,2); 
DECLARE @Line1ScaleCount int; 
DECLARE @Line1Scale1Percentage varchar(10); 
DECLARE @Line1Scale2Percentage varchar(10); 
DECLARE @Line1Scale3Percentage varchar(10); 
DECLARE @Line1Scale4Percentage varchar(10); 
DECLARE @Line1Scale5Percentage varchar(10); 
DECLARE @Line1Scale6Percentage varchar(10); 
DECLARE @Line1Scale7Percentage varchar(10); 
DECLARE @Line1Percentage varchar(10); 
DECLARE @Line1TargetCaseCount decimal(10,2); 


Set statement 

SET @CasesPerHour = 70.00 

--Line 1 Sets 
SET @Line1Start = (SELECT TOP 1 PrintDateTime 
FROM CompletedCaseManifest 
WHERE LineNumber = 1 and PrintDateTime > (CASE WHEN (cast(getdate() as time(0)) < '06:00:00' OR cast(getdate() as time(0)) > '17:15:00') then (CASE WHEN cast(getdate() as time(0)) < '06:00:00' then DATEADD(day, DATEDIFF(day, 1, GETDATE()), '17:15:00') else DATEADD(day, DATEDIFF(day, 0, GETDATE()), '17:15:00') end) else DATEADD(day, DATEDIFF(day, 0, GETDATE()), '06:00:00') end)) 
SET @Line1Breaks = ISNULL((SELECT SUM(BreakLength) FROM BreakTracker WHERE LineNumber = 1 AND BreakStartTime > @Line1Start), 0)/60.00 
SET @Line1ScaleCount = (SELECT COUNT(Distinct ScaleNumber) FROM CompletedCaseManifest Where LineNumber = 1 and PrintDateTime > @Line1Start) 
SET @Line1TargetCaseCount = (((datepart(minute,convert(varchar(8),cast(getdate() - @Line1Start as time(0))))/60.00) 
+ datepart(hour,convert(varchar(8),cast(getdate() - @Line1Start as time(0)))) - @Line1Breaks)*@CasesPerHour) 
SET @Line1Scale1Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 1 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Scale2Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 2 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Scale3Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 3 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Scale4Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 4 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Scale5Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 5 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Scale6Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 6 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Scale7Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and ScaleNumber = 7 and CaseVoided = 0 and PrintDateTime > @Line1Start)/@Line1TargetCaseCount)*100) 
SET @Line1Percentage = Convert(decimal(10,2),((SELECT COUNT(CaseID) FROM CompletedCaseManifest WHERE LineNumber = 1 and CaseVoided = 0 and PrintDateTime > @Line1Start)/(@Line1TargetCaseCount*@Line1ScaleCount))*100) 

일반적으로 Select 문

Select @Line1Scale1Percentage + '%' as Line1Scale1, 
@Line1Scale2Percentage + '%' as Line1Scale2, 
@Line1Scale3Percentage + '%' as Line1Scale3, 
@Line1Scale4Percentage + '%' as Line1Scale4, 
@Line1Scale5Percentage + '%' as Line1Scale5, 
@Line1Scale6Percentage + '%' as Line1Scale6, 
@Line1Scale7Percentage + '%' as Line1Scale7, 
@Line1Percentage + '%' as Line1Average, 
+0

프로 시저에 입력 또는 출력 매개 변수가 선언되지 않은 경우 아무 것도 제공하지 않습니다. 선택에서 행을 반환하면; [방법 : 행을 반환하는 저장 프로 시저 실행] (http://msdn.microsoft.com/en-us/library/d7125bke.aspx) –

답변

1

, 저장 프로 시저 그냥 StoredProcedure 명령 유형을 가진 SqlCommand을 실행 전화 :

using (SqlCommand cmd = new SqlCommand("storedProcedureName", connection)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.ExecuteNonQuery(); 
} 

당신이 ExecuteNonQuery 사용 여부 또는 ExecuteXYZ의 다른 메서드는 호출 결과를 기대하는지 여부에 따라 다릅니다. 귀하의 경우에는

using (SqlDataReader reader = cmd.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     // Handle one item of the result set. 
    } 
} 

가, 저장 프로 시저가 하나 개의 레코드를 반환, 그래서 당신은 ExecuteReader을 사용할 수 있습니다 : 저장 프로 시저가 결과 집합을 반환하는 경우, 예를 들어,이 같은 ExecuteReader을 사용할 수 있습니다.

1

저장 프로 시저가 EXEC 문 (http://technet.microsoft.com/en-us/library/ms189915.aspx)과 함께 호출됩니다.

저장 프로 시저의 본문 내에서 선언 된 변수는 전달되지 않습니다. 저장 프로 시저 본문 앞에 괄호 안에 지정된 매개 변수 만 외부에서 전달됩니다.

저장 프로 시저 (http://technet.microsoft.com/en-us/library/ms187926.aspx)의 Microsoft 설명서는 눈 유약 얻을 수 있습니다,하지만 당신은 아래쪽으로 예제를 찾고에 초점을 맞출 경우 가입을 취소 할 수 있습니다.

관련 문제