Bu işi yapmak için iki seçeneğiniz var. Ya bir Tek Sonuç Kümesi kullanabilir ya da ÇIKIŞ parametresini kullanabilirsiniz. Şu anda ikisini de doğru kullanmıyorsunuz.
OUTPUT parametresi
Saklı yordamınız, @OrderCount
yönü olan bir parametreye sahip olarak tanımlanırOUTPUT
Saklı yordamı SSMS, .NET gibi bir araçta kullanmak isteseydiniz, şöyle bir şey olurdu:
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
Yukarıdakileri belirtmeden çalıştırmak OUTPUT
ancak @orderCount değerine bakmak geçerlidir. 1435'ten 0'a değişir.
SSIS içinde SQL Görevi Yürüt kullandığınızda da aynısı geçerlidir. Parametrenin ÇIKIŞ üzerinde olduğunu ve ayrıca Parametre eşlemeleri sekmesinde belirtmeniz gerekir.
Ayrıca eşlemek istediğiniz değişkeni belirtin ve ÇIKIŞ yönünü orada kullanın. Burada sonucu Int32 türünde bir SSIS Değişkeni ile eşledimorderCount
Tek Sonuç Seti
Bunun doğru ilk bölümü var - sonuç kümesinin Tek Sıra olduğunu belirttiniz.
EXECUTE dbo.TestStoredProcSSVariable ?
Bir giriş değeri belirtmeniz gerektiği için kullandığımı veya proc çağrısının kesileceğini (en azından tanımladığınız gibi) not edeceksiniz. Zor yerine bir değer kodlu olabilirdi ?
beğendiniz0
Sonra, Sonuç Kümesi sekmesinde, burada ilk sütunu (sıfırıncı sıralı) adlı bir Değişkenle eşliyorum orderCountb
Sağlanan saklı yordamı çalıştırırsanız, orderCountb içinde bir değer elde edemezsiniz. Neden? Çünkü saklı yordam çağrısından hiçbir şey döndürmüyorsunuz. Saklı yordamın içine son bir açıklama ekledim
SELECT @OrderCount AS OrderCount;
Kendin Yap
Aşağıdaki yaklaşımları kullanarak her iki yaklaşımı da keşfedebilirsiniz. Biml nedir? İş Zekası İşaretleme Dili, BI için işletim sistemidir. Bunu önemsemeniz neden, bazı XML'leri bir SSIS paketine dönüştürmenize izin vermesidir. Tek yapmanız gereken ücretsiz addon BIDS Helper'ı indirip kurmaktır
TEKLİF Yardımcısı'nı yükledikten sonra,
- Projeye sağ tıklayın ve Yeni Biml dosyası ekle'yi seçin
- dosyanın içeriğini aşağıdaki XML ile değiştir
- 5. satırdaki değerleri düzeltin.
Data Source
Gerçek bir sunucuya güncelleyin ve Provider
SSIS sürümünüzle hizalayın. Ekran görüntünüze baktığınızda, bu muhtemelen SQLNCLI10.1 olacaktır
- BimlScript.biml'e sağ tıklayın ve SSIS Paketleri Oluştur'u seçin
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>
Aşağıdaki SSIS paketinin keyfini çıkarın
@[User::orderCount]