SSIS Is Not Just for SQL Server

  • Comments posted here are about the content posted at http://www.sqlservercentral.com/columnists/tmitchell/3021.asp

    Tim Mitchell, Microsoft Data Platform MVP
    Data Warehouse and ETL Consultant
    TimMitchell.net | @Tim_Mitchell | Tyleris.com
    ETL Best Practices

  • which the newness? the DTS in the SQL Server 2000 already was a great tool, the SSIS is only one natural evolution.

    I was a beta tester of SQL Server 2005 and the SSIS is a retty tool.

  • Good article, everyone should be made aware that as SSIS has the ability to connect to numerous sources or destinations, not necessarily involving a SQL Server database.

    I used DTS for this sort of thing on many occasions, now we have even more sophisticated possibilities.

    Having said that, the syntax for the parameters appears inconsistent, I seriously need to spend a lot of time fiddling with these packages.

    Does anyone have a list of useful sources for examples of SSIS packages (as well as here and Microsoft)?

  • A really dumb beginners question re Public Sub Main:

    Where (and in what language) is this defined?

    Where is the object Dts created?

  • Jim, all "code" is done in VB.NET. The object "Dts" is created for you by the code designer and is used in Script Tasks ONLY! Do not use this object in a Script Component in the DataFlow, well, because you won't even find it. Instead, for Script Components, use the keyword "Me" (ex. Me.Variables).

    Anyway, nice article. I too have been using SSIS for things that are only 20% reliant on SQL Server. For example, I am working on a package that downloads all the Census Bureau data files and then imports them into a relational database. I found that downloading the 12GB of hundreds of files manually was obviously tedius! I have a Package now that downloads all the files, extracts the ZIP files, and then for archiving re-compressing all files (per State) into a RAR archive.

    These tasks are something that would have taken months to do in a standard program. I know, because I embarked on it...

  • Harvesting data from Weblogs, eh? Hmm. I seem to remember hearing something about an infamous email campaign. Something along these lines:

    (1) In your database create a nonsense, but unique, filename for each "target".

    (2) Use that to include in a well crafted HTML email that references an external graphic. http://www.myserver.not/winnerimage/GH567#QWCF99.jpg

    (3) Now harvest the logs from the web server every day.

    The HTML email has the height and width of the IMG tag set to 1 pixel each. Who would pay any attention to a failed graphic in an email. To be more evil set the alt text to say "Hidden for security".

    Now the directory "winnerimage" does not even exist on the web server. You don't want to waste the space. You are only interested in the errors in the web log. Note that "GH567#QWCF99" is the key back into the database.

    Each error from attempts access these images tells quite a story. You now know when that email was opened or PREVIEWED. You have the date, time, and IP address at a minimum.

    There are still places that will buy lists of verified email addresses at 2 to 5 cents each.

    This is not your project, is it? :Whistling:

    ATBCharles Kincaid

  • I've found the Import/Export Tool with SQL Server 2000 to be the best tool at my disposal for extracting query results from our Oracle Server, regardless of where I need the results to go.


    Puto me cogitare, ergo puto me esse.
    I think that I think, therefore I think that I am.

  • I was disappointed when, per the MS Connect site, that the horrible flaw in the SSIS FTP task was not fixed. (The flaw is that the source/destination directory is arbitrarily forced to start with a "\", effectively rendering the FTP task useless when working with mainframe systems.)

    (Just venting...)

    Aside to tymberwyld...I had missed the notification of your post answering my question about the code and saw your response only today. Thank you very much!

  • Jim Russell (5/21/2008)


    I was disappointed when, per the MS Connect site, that the horrible flaw in the SSIS FTP task was not fixed. (The flaw is that the source/destination directory is arbitrarily forced to start with a "\", effectively rendering the FTP task useless when working with mainframe systems.)

    (Just venting...)

    My hatred of the FTP task is that it is only FTP -- not SFTP. I'm developing a file transfer job right now and have to run the SFTP step as a command task.

    -----
    [font="Arial"]Knowledge is of two kinds. We know a subject ourselves or we know where we can find information upon it. --Samuel Johnson[/font]

  • Charles Kincaid (5/21/2008)


    ...(1) In your database create a nonsense, but unique, filename for each "target".

    (2) Use that to include in a well crafted HTML email that references an external graphic. http://www.myserver.not/winnerimage/GH567#QWCF99.jpg

    (3) Now harvest the logs from the web server every day. ...

    Which is why my Yahoo mail does not download images...

    -----
    [font="Arial"]Knowledge is of two kinds. We know a subject ourselves or we know where we can find information upon it. --Samuel Johnson[/font]

  • Wayne West (6/11/2008)


    Which is why my Yahoo mail does not download images...

    Likewise I have killed all the preview panes in Outlook and don't use Outlook Express for my home e-mail.

    ATBCharles Kincaid

  • I'm pulling my hair out over this. I'm trying to pass the value of a package variable to a batch command script running in a SSIS Execute Process Task. I thought I'd found the answer in this article, on how to set the Task's Arguments property using an Expression, rather than hard coding an Arguments value. But when I set use this expression for the Arguments:

    Arguments | "(DT_STR, 4, 1252) @[User::RowCnt]",

    I don't get the value for the RowCnt variable (eg, 15), I get this literal value (DT_STR, 4, 1252) @[User::RowCnt] passed into my command script.

    Any ideas what I'm doing wrong here?

  • Can you include a brief code snippet, I can't really understand what you're doing to pass the variable.

  • Hi, sorry for the confusion; I'm a newbie to SSIS, but a veteran of SQL Server. I'm not sure what you're asking for. I think you're asking to see my Execute Process Task's property settings. I don't know how to output the property settings in a print-friendly way to include in this post. If there is such a way, please set me know.

    What I'm trying to do seems simple. I have a DOS command script that I want to call using the Execute Process Task. The script takes 1 parameter, a number. When I call it manually from a Command prompt and pass a number as a parameter, all is well:

    C:\scripts\myscript.cmd 6

    In my package, I have a package variable of type Int32, named RowCnt, set in an earlier step. I want to pass the value of that variable into my command script as an argument.

    The script name is set in Execute Process Task's property Executable: C:\scripts\myscript.cmd

    So far so good, because I can see the script getting called.

    Now for the argument. I set the Execute Process Task's property Argument to the variable: User::RowCnt. The package executes successfully, but the script reports the following as the value of the input variable: User::RowCnt. So it's passing the variable name, not the value of the variable.

    So after some research, I find this SQLServerCentral article, which tells me to use an expression to set the Argument property. I set the Argument property to empty. In the Expressions property, I set the value of the Arguments property this Expression: @[User::RowCnt]. First error is in the Expression builder window:

    [font="Courier New"]Cannot convert expression value to property type.

    ------------------------------

    ADDITIONAL INFORMATION:

    Cannot convert 'System.Int32' to 'System.String'.[/font]

    OK, I need to cast it as a String. I append the TypeCast operator in front of it: (DT_STR, 3, 1252) @[User::RowCnt]. Next error:

    [font="Courier New"]Expression cannot be evaluated.

    ------------------------------

    ADDITIONAL INFORMATION:

    The expression "(DT_STR, 3, 1252) @[User::RowCnt]" has a result type of "DT_STR", which cannot be converted to a supported type.[/font]

    I look at the example again, and see the Expression is surrounded by quotes, so I try that:"(DT_STR, 3, 1252) @[User::RowCnt]". That passes the Expression Builder syntax checks, and the package runs without error, but the script reports the following as the value of the input variable: (DT_STR

    So again the variable name is getting passed, not the value of the variable.

    Let me know what other information you need (and how to provide it).

  • Looks like this is a data typing issue. When I use the Expression (DT_WSTR, 4) @[User::RowCnt] to set the Argument property of the Execute Process Task, the value of User::RowCnt is passed into my script, and all is well.

    Why would DT_WSTR work, and not DT_STR?

Viewing 15 posts - 1 through 15 (of 17 total)

You must be logged in to reply to this topic. Login to reply