Anda memiliki dua pilihan untuk membuat ini berfungsi. Entah Anda dapat menggunakan Set Hasil Tunggal atau Anda dapat menggunakan parameter OUTPUT. Saat ini Anda tidak menggunakan keduanya dengan benar.
Parameter OUTPUT
Prosedur tersimpan Anda didefinisikan memiliki parameter @OrderCount
dengan arahOUTPUT
Jika Anda ingin menggunakan prosedur tersimpan dalam alat, SSMS, .NET, apa pun, itu akan terlihat seperti
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
Ini valid untuk menjalankan di atas tanpa menentukan OUTPUT
tetapi melihat nilai @orderCount. Itu berubah dari 1435 menjadi 0.
Hal yang sama berlaku ketika Anda menggunakan Execute SQL Task dalam SSIS. Anda harus menentukan bahwa parameternya adalah OUTPUT dan juga menentukannya di tab Pemetaan parameter.
Tentukan juga variabel yang ingin Anda petakan dan gunakan arah OUTPUT di sana. Di sini saya telah memetakan hasilnya menjadi Variabel SSIS dari tipe Int32 yang disebutorderCount
Set Hasil Tunggal
Anda memiliki bagian pertama yang benar ini - Anda telah menetapkan bahwa set hasil adalah Baris Tunggal.
Anda akan perhatikan bahwa saya menggunakan EXECUTE dbo.TestStoredProcSSVariable ?
karena Anda harus menentukan nilai input atau panggilan proc akan terputus (setidaknya seperti yang Anda definisikan). Anda bisa mengkodekan nilai sebagai pengganti ?
sejenisnya0
Kemudian, pada tab Set Hasil, di sini saya memetakan kolom pertama (zeroth ordinal) ke Variabel yang dipanggil orderCountb
Jika Anda menjalankan prosedur tersimpan yang disediakan, Anda tidak akan mendapatkan nilai di orderCountb. Mengapa? Karena Anda tidak mengembalikan apa pun dari panggilan prosedur tersimpan. Saya menambahkan pernyataan terakhir di dalam prosedur tersimpan
SELECT @OrderCount AS OrderCount;
Lakukan sendiri
Anda dapat menjelajahi kedua pendekatan menggunakan biml berikut. Apa itu biml? Bahasa Markup Intelijen Bisnis adalah sistem operasi untuk BI. Mengapa Anda peduli tentang hal itu adalah bahwa hal itu akan memungkinkan Anda untuk mengubah beberapa XML menjadi paket SSIS. Yang perlu Anda lakukan adalah mengunduh dan menginstal pembantu BIDS addon gratis
Setelah menginstal BIDS Helper,
- Klik kanan pada proyek dan pilih Tambahkan file Biml baru
- ganti konten file dengan XML berikut
- Perbaiki nilai di baris 5. Perbarui
Data Source
ke server nyata dan Provider
untuk menyelaraskan dengan versi SSIS Anda. Melihat tangkapan layar Anda, ini kemungkinan adalah SQLNCLI10.1
- Klik kanan pada BimlScript.biml dan pilih Hasilkan Paket 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>
Nikmati paket SSIS berikut
@[User::orderCount]