January 7, 2005 at 9:43 pm
Not sure exactly how to approach this so any help would be greatly appreciated. I'll try to simplify this a little bit. We have an activity table and users can attach multiple files to each activity. These files are stored in a seperate table in an image column and the two tables are tied together with a common id (acid). We have a user that has attached 19 files to an activity and needs to set up additional activities for other accounts in the database with those same 19 files attached.
Is there anyway I can easily either export or copy those files so they are duplicated and attached to the other activity records? I know there are pointers and such for the image files and basically just need a little direction on this.
Quite honestly I probably could have put these all in with our application by now but at this point really want to figure out how to do it in sql because I have a feeling I may have to do it again in the future.
Thanks in advance for your help.
January 8, 2005 at 4:21 am
You can do this in SQL -
insert into tblImage(acid, image)
select xxxx, t1.image
from tblImage t1
where t1.acid = yyyy
xxxx is literal text and should be replaced with the new account number (ie for the account that the new files are to be copied to).
yyyy is the account ID for the account already containing the 19 files (ie the account from which the files are to be copied).
This query will create the 19 files just for account xxxx. It needs to be re-run for tho other accounts (amending xxxx - the target account - each time before running).
Hmmm, hope that makes sense
Phil
The absence of evidence is not evidence of absence
- Martin Rees
The absence of consumable DDL, sample data and desired results is, however, evidence of the absence of my response
- Phil Parkin
January 9, 2005 at 12:47 am
Thanks Phil. That made a lot of sense and it helped. I think I may have simplified too much though. I'm actually dealing with three tables and now that I have to try and accomplish this, I'm not sure why we did it this way.
Anyhow. I used what you gave me to populate our ac_dochead table and it worked perfect. That table has fields of: docid, acid, filename, description, displayname, last_update. I used the following to populate this table based on another activity with the documents I needed:
INSERT INTO ac_dochead (acid, filename, description, displayname, last_update)
SELECT xxxx, ah1.filename, ah1.description, ah1.displayname, ah1.last_update
FROM ac_dochead ah1
WHERE ah1.acid = yyyy
Now the issues is that the actual documents are in a separate table called ac_docdetail containing the fields of docid and doc. The doc field is the image field.
I've tried a couple of things to try and get the ac_docdetail table poplulated but haven't had any luck.
Any ideas would be helpful. Thanks.
Curt
January 10, 2005 at 2:33 am
This is by far the most complete discussion on BLOBs and SQL Server I know
http://www.microsoft.com/resources/documentation/sql/2000/all/reskit/en-us/part3/c1161.mspx
HTH
--
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org/blogs
My blog: http://www.insidesql.org/blogs/frankkalis/[/url]
January 11, 2005 at 5:20 pm
How is the DocID field (the primary key?) in ac_docdetail generated? Is it an IDENTITY field?
Regards
Phil
The absence of evidence is not evidence of absence
- Martin Rees
The absence of consumable DDL, sample data and desired results is, however, evidence of the absence of my response
- Phil Parkin
January 13, 2005 at 9:28 am
The DocID field is an Identity field in the ac_dochead table and the system we are using places the DocID along with the blob into the ac_docdetail table once the record has been created in ac_dochead.
Not a great design, I realize, but it's what we have to deal with... for now anyway.
January 13, 2005 at 5:42 pm
OK - may not be a great design, but it's very a common way of doing header/detail relationships.
So you now have several accounts which have got 19 header records but no associated detail records.
For each of these records we need to populate the ac_docdetail table, with DocID being the link between the two. The tough bit!
First step is to populate the docdetail table with the list of the new DocIDs:
Insert into ac_docdetail(docid)
select s.DocID
from ac_dochead s left outer join ac_docdetail d
on s.docid = d.docid
where d.docid is null
Next step is to populate the image field in each of these new records.
Update d
Set image = d2.image
From ac_dochead s inner join ac_docdetail d
On s.docid = d.docid inner join ac_dochead s2
On s.filename = s2.filename inner join acc_docdetail d2
On s2.docid = d2.docid
Where d.image is null
And s2.acid = --insert the acid of the account to copy the image from
This is complex stuff, so I may be a little bit off as I haven’t tested it, but hopefully you can see what I am trying to do: we’ve got to navigate from the ‘empty’ docid to a populated docid (I’ve assumed that this can be done uniquely via the filename field on the ac_dochead table) for the account from which we want to copy. Then we need to get the image data for that docid and copy it across to the new record.
Regards
Phil
The absence of evidence is not evidence of absence
- Martin Rees
The absence of consumable DDL, sample data and desired results is, however, evidence of the absence of my response
- Phil Parkin
Viewing 7 posts - 1 through 6 (of 6 total)
You must be logged in to reply to this topic. Login to reply