이 작업을 수행하기 위해 두 가지 선택이 있습니다. 어느 쪽이든 당신은 단일 결과 집합을 사용할 수 있습니다 또는 당신은 출력 매개 변수를 사용할 수 있습니다. 현재 올바르게 사용하고 있지 않습니다.
출력 매개 변수
저장된 절차의 파라미터를 갖는 것으로 정의되는 @OrderCount
방향으로OUTPUT
도구, SSMS, .NET 등에서 스토어드 프로 시저를 사용하려면 다음과 같이 보일 것입니다.
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
지정하지 않고 위를 실행하는 것이 유효 OUTPUT
하지만 @orderCount의 값을보십시오. 1435에서 0으로 변경됩니다.
SSIS 내에서 SQL 실행 작업을 사용할 때도 마찬가지입니다. 매개 변수가 OUTPUT에 있도록 지정하고 매개 변수 맵핑 탭에서도 지정해야합니다.
또한 매핑하려는 변수를 지정하고 OUTPUT 방향을 사용하십시오. 여기에 결과를 Int32라는 SSIS 변수에 매핑했습니다.orderCount
단일 결과 세트
이 올바른 첫 번째 부분이 있습니다-결과 집합이 단일 행임을 지정했습니다.
당신은 내가 사용하고 있습니다 것입니다 EXECUTE dbo.TestStoredProcSSVariable ?
당신이 입력 값 또는 (당신이 그것을 정의한 최소한으로) 중단 할 시저 호출을 지정해야한다. 당신은 하드 대신에 값을 코딩 수도 ?
같은0
그런 다음 결과 집합 탭에서 첫 번째 열 (0 번째 서수)을 변수라는 변수에 매핑합니다. orderCountb
제공된 저장 프로 시저를 실행하면 orderCountb의 값을 얻지 못합니다. 왜? 저장 프로 시저 호출에서 아무것도 반환하지 않기 때문입니다. 저장 프로 시저 안에 최종 진술을 추가했습니다.
SELECT @OrderCount AS OrderCount;
너 스스로해라
다음 biml을 사용하여 두 가지 방법 중 하나를 탐색 할 수 있습니다. Biml이란 무엇입니까? Business Intelligence Markup Language는 BI의 운영 체제입니다. 이것이 중요한 이유는 일부 XML을 SSIS 패키지로 변환 할 수 있기 때문입니다. 무료 애드온 BIDS 도우미를 다운로드하여 설치하기 만하면됩니다.
BIDS Helper를 설치 한 후
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 새 Biml 파일 추가를 선택하십시오.
- 파일 내용을 다음 XML로 바꿉니다.
- 5 행의 값을 수정하십시오.
Data Source
를 실제 서버로 업데이트하고 Provider
SSIS 버전에 맞 춥니 다. 스크린 샷을 보면 아마도 SQLNCLI10.1 일 것입니다.
- BimlScript.biml을 마우스 오른쪽 단추로 클릭하고 SSIS 패키지 생성을 선택하십시오.
Bimlscript.biml
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection
Name="tempdb"
ConnectionString="Data Source=.\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;"
/>
</Connections>
<Packages>
<Package
Name="dba_114775"
ConstraintMode="Linear"
>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
Name="SQL Make procedure">
<DirectInput>
<![CDATA[IF EXISTS
(
SELECT
*
FROM
sys.procedures AS P
INNER JOIN
sys.schemas AS S
ON S.schema_id = P.schema_id
WHERE
S.name = 'dbo'
AND P.name = 'TestStoredProcSSVariable'
)
BEGIN
DROP PROCEDURE dbo.TestStoredProcSSVariable
END
GO
CREATE PROCEDURE dbo.TestStoredProcSSVariable
(
@OrderCount int OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
SET @OrderCount = 1135;
SELECT @OrderCount AS OrderCount;
END
GO
]]>
</DirectInput>
</ExecuteSQL>
<Container Name="SEQC Result set" ConstraintMode="Linear">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL Make procedure.Output"></Input>
</Inputs>
</PrecedenceConstraints>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
ResultSet="SingleRow"
Name="SQL SingleRow">
<DirectInput>EXECUTE dbo.TestStoredProcSSVariable ?;</DirectInput>
<Results>
<Result VariableName="User.orderCountb" Name="0" />
</Results>
<Parameters>
<Parameter DataType="Int32" VariableName="User.orderCountb" Name="0" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="Execute SQL Task 2">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input
OutputPathName="SQL Placeholder.Output"
EvaluationOperation="ExpressionAndConstraint"
EvaluationValue="Success"
Expression="@[orderCount] < 5" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
</Container>
<Container Name="SEQC Output Parameter" ConstraintMode="Linear">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL Make procedure.Output"></Input>
</Inputs>
</PrecedenceConstraints>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
Name="SQL Output parameter">
<DirectInput>EXECUTE dbo.TestStoredProcSSVariable ? OUTPUT;</DirectInput>
<Parameters>
<Parameter
DataType="Int32"
VariableName="User.orderCount"
Name="0"
Direction="Output" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="Execute SQL Task 2">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input
OutputPathName="SQL Placeholder.Output"
EvaluationOperation="ExpressionAndConstraint"
EvaluationValue="Success"
Expression="@[orderCount] < 5" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
</Container>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SEQC Result set.Output" />
<Input OutputPathName="SEQC Output Parameter.Output" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
<Variables>
<Variable DataType="Int32" Name="orderCount">-1</Variable>
<Variable DataType="Int32" Name="orderCountb">-1</Variable>
</Variables>
</Package>
</Packages>
</Biml>
다음 SSIS 패키지를 즐기십시오
@[User::orderCount]