У вас є два варіанти, щоб зробити цю роботу. Або ви можете використовувати єдиний набір результатів, або можете скористатися параметром OUTPUT. Наразі ви не використовуєте належним чином.
Параметр OUTPUT
Ваша збережена процедура визначається як параметр @OrderCount
з напрямком наOUTPUT
Якщо ви хочете використовувати збережену процедуру в інструменті, SSMS, .NET, як би там не було, це виглядало б приблизно так
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
Дійсно запускати вищезазначене, не вказуючи, OUTPUT
але дивлячись на значення @orderCount. Він змінюється з 1435 до 0.
Те ж саме справедливо, коли ви використовуєте Виконати завдання SQL в SSIS. Необхідно вказати, що параметр знаходиться на ВИХІДУ, а також вказати його на вкладці "Параметри відображення".
Вкажіть також змінну, яку ви хочете зіставити, і використовуйте там напрям виходу Тут я відобразив результат у змінну SSIS типу Int32orderCount
Набір єдиного результату
Ви маєте першу частину цього правильного - ви вказали, що набір результатів - Один рядок.
Ви зауважите, що я використовую, EXECUTE dbo.TestStoredProcSSVariable ?
як ви повинні вказати вхідне значення, або виклик proc перерветься (принаймні так, як ви це визначили). Ви могли б важко зашифрувати значення замість ?
подібного0
Потім на вкладці "Набір результатів" я тут відображаю перший стовпець (нульовий порядковий) до змінної, що називається orderCountb
Якщо запустити надану збережену процедуру, ви не отримаєте значення в orderCountb. Чому? Тому що ви нічого не повертаєте із збереженого виклику процедури. Я додав остаточне твердження всередині збереженої процедури
SELECT @OrderCount AS OrderCount;
Зроби це сам
Ви можете дослідити будь-який підхід, використовуючи наступний бімл. Що таке бімл? Мова розмітки Business Intelligence - це операційна система для BI. Чому ви дбаєте про це, це дозволить вам перетворити деякий XML в пакет SSIS. Все, що вам потрібно зробити, це завантажити та встановити безкоштовний допоміжний помічник BIDS Helper
Після встановлення 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]