To export the data you've got lots of options, at least from lisp. I'm not sure of a standard (or even vertical) command which would allow export of XRecord data though. But you can export quite easily from
list to CSV, or to XLS using an
ActiveX link to Excel, or even to any DB through something like
ADOLisp. Though only the CSV one would work on Mac - the other 2 use ActiveX/COM objects.
As for Handle/ID changing when a DWG is inserted as a block. Yes this does happen, unfortunately I don't know of any way to get around this.
I don't know map at all, and haven't used other AEC verticals that much, so I'm not able to tell for sure if they can work directly with SQL. I'd go with ADOLisp myself - that way I can be sure I know what's going on.
I'd try to steer clear of making so many unique blocks just so you can distinguish them from one another (bloated file size for no reason), and you're not going to get any help from that either since you either need to generate a unique name for each or use unnamed blocks - which give the same problem as Handles do. Why not rather just have another "Key" value in your xrecord - you can thus generate a "unique" code for each - perhaps us a GUID string:
http://www.theswamp.org/index.php?topic=41820.msg469380#msg469380