Insert a single row and return its primary key

前端 未结 3 1844
太阳男子
太阳男子 2020-11-30 13:34

In SSIS, How do I use the execute SQL task to insert a single row with no parameters and get the primary key back so I can set it to user variable? My insert query is simply

3条回答
  •  心在旅途
    2020-11-30 14:38

    Good question, took me a few tries to figure it out. Declare an SSIS variable of type Int32 (unless you need sizing for a bigint or numeric). I chose tablePk as mine.

    Option 1

    Execute SQL Task

    • General tab

    ResultSet: None

    SQL

    INSERT INTO dbo.ImportData (EndDate) VALUES (NULL);
    SELECT ? = SCOPE_IDENTITY()
    
    • Parameter Mapping tab

    Variable Name: User::tablePk

    Direction: Output

    Data Type: Long

    Parameter Name: 0

    Parameter Size: -1

    Option 2

    This was the original solution as I couldn't grok how to get the placeholder ? in a normal query. It couldn't as simple as what I had above, except it was.

    The only difference is the query used

    SQL

    DECLARE @sql nvarchar(500)
    , @paramDef nvarchar(500)
    
    SELECT
        @sql = N'INSERT INTO dbo.ImportData (EndDate) VALUES (NULL);
        SELECT @ident = SCOPE_IDENTITY();'
    ,   @paramDef = N'@ident int OUTPUT'
    EXECUTE sp_executesql @sql, @paramDef, @ident = ? OUTPUT
    

    Option 3

    If you're using a data flow, I outline an approach on How to Add the Result Set from a T-SQL Statement to a Data Flow? In short, you need to add a column into the data flow prior to an OLE DB Command. Within the OLE DB Command, you will map that empty column into a OUTPUT parameter from your stored procedure and then as the stored procedure fires, it will replace the column with the value from the procedure.

提交回复
热议问题