_Streams Table

The _Streams table lists embedded OLE data streams. This is a temporary table, created only when referenced by a SQL statement.

Name Text YN
Data Binary NY




A unique key that identifies the stream. The maximum length of Name is 62 characters.


The unformatted binary data.


To copy an OLE data stream (for example, an object of the Binary data type) from a file into a database, create a record in the _Streams table and enter the name of the data stream into the Name column of this record and copy the data from the file into the Data column using MsiRecordSetStream. Use MsiViewModify to insert the new record into the table.

To read a binary data stream embedded in a database, use a SQL query to find and to fetch the record containing the binary data. Use MsiRecordReadStream to read the binary data into a buffer.

To move a binary data stream from one database to another, first export the data to a file. Use a SQL query to find the data stream in the file and use MsiRecordSetStream to copy the data from the file into Data column of _Streams table of the second database. This ensures that each database has its own copy of the binary data. You cannot move binary data from one database to another simply by fetching a record with the data from the first database and inserting it into the second database.

To delete a data stream, fetch the record and set the Data column to null before updating the record. Another method is to remove the record from the table, deleting it using either MsiViewModify or a plain SQL query. A stream should not be fetched into a record if the stream is deleted from the table.

To rename an OLE data stream, update the 'Name' column of the record.

If a hold is placed on this table using SQL (ALTER TABLE <table> HOLD) or a column is added with HOLD, the table must be released using FREE. Streams are not written until the table has been released or committed.