Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 338
  • Last Modified:

Compare TXT File via SQL Script

I have a .csv file containing a list of IDs.  The file gets updated daily.  I need a SQL script that will look for matching IDs within the database table named CONTAINER and then edit the LOCATION field of the matching record.
0
slattdog
Asked:
slattdog
  • 5
  • 3
2 Solutions
 
Jim HornMicrosoft SQL Server Developer, Architect, and AuthorCommented:
<wild guess>

1.  Import the .csv into a table, using either an SSIS package or a BULKINSERT statement.
2.  Write a MERGE statement merging the above 'source' with the CONTAINER 'target', spelling out which columns equate to a match (i.e. do nothing), which columns equate to a changed row (i.e. update), and which are new rows (i.e. insert)

Pragmatic Works' Task Factory suite of custom SSIS components has an Upsert task that allows you to perform 2. in SSIS.
0
 
slattdogAuthor Commented:
I have only a very basic understanding of SQL.  I was really looking for help with the mechanics of it, not just a conceptual understanding.  :-)
0
 
slattdogAuthor Commented:
I'd prefer to keep it in a script if possible.  Looking at the BULKINSERT statement it looks like that would work to get the data into the SQL DB.  What would the Query look like to compare that against a field in a table and then update a field in any records that match?
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
slattdogAuthor Commented:
Okay.  I have the BULK INSERT working.  So, now I have a table with the IDs.  (This table consists of a single field, with each record being an ID.)  Now I need the SQL code to match these IDs against the IDs in another table (same database) and update a field in each record where there is a match.
0
 
Anthony PerkinsCommented:
Something like this perhaps
UPDATE t
SET YourField = ????
FROM YourTable t
           INNER JOIN BulkInsertTable b on t.ID = b.ID
0
 
slattdogAuthor Commented:
Does this look right?

UPDATE test.dbo.Container
   SET Customer=""
   WHERE ID IN (SELECT ID FROM test.dbo.Upload);

Upload = table that I used for the Bulk Insert that contains all the IDs from the text file.
I want the Customer field to be blank if the ID field matches any ID from the Upload table.
0
 
Anthony PerkinsCommented:
My preference is to use a JOIN, as in
UPDATE  c
SET     Customer = ''
FROM	test.dbo.Container c
		INNER JOIN test.dbo.Upload u ON c.ID = u.ID

Open in new window

But you can use a subquery if it is clearer to you.  But in any case it is single and not double quotes.

Another option is to use EXISTS as in:
UPDATE  c
SET     Customer = ''
FROM    test.dbo.Container c
WHERE   EXISTS ( SELECT 1
                 FROM   test.dbo.Upload u
                 WHERE  c.ID = u.ID );

Open in new window

0
 
slattdogAuthor Commented:
Just to be clear... any of these methods this will cycle through each entry in test.dbo.Uploads for a matching entry in test.dbo.Container correct?  Non-matches would be ignored and duplicates would just get processed again (no harm done).
0
 
Anthony PerkinsCommented:
Why don't you see for yourself:

Method 1:
SELECT  *
FROM  test.dbo.Container
WHERE ID IN (SELECT ID FROM test.dbo.Upload);

Open in new window

Method 2:
SELECT c.*
FROM	test.dbo.Container c
		INNER JOIN test.dbo.Upload u ON c.ID = u.ID

Open in new window

Method 3:
SELECT c.*
FROM    test.dbo.Container c
WHERE   EXISTS ( SELECT 1
                 FROM   test.dbo.Upload u
                 WHERE  c.ID = u.ID );

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now