sqloptions:initialDatabase (elemento de encabezado)
El encabezado SOAP sqloptions:initialDatabase permite que el cliente especifique a qué base de datos se conectará en primer lugar, por ejemplo:
<SOAP-ENV:Header
xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:sqloptions="https://schemas.microsoft.com/sqlserver/2004/SOAP/Options">
<sqloptions:initialDatabase
SOAP-ENV:mustUnderstand="1"
value="databaseName"
optional="true" | "false"
filename="databaseFileName" />
</SOAP-ENV:Header>
La opción sqloptions:initialDatabase
aparece como un encabezado SOAP. El encabezado está compuesto por un elemento, denominado sqloptions:initialDatabase
. El elemento tiene un atributo obligatorio, value
. Éste constituye un valor de cadena. El atributo value
especifica el nombre de la base de datos inicial a la que desea conectarse. La cadena se interpreta exactamente como un comando USE de Transact-SQL. El elemento tiene dos atributos opcionales: optional
, que es un valor booleano (el valor predeterminado es false
) y filename
, que es un valor de cadena (el valor predeterminado es null)
. El atributo optional
especifica si el hecho de que no se pueda establecer una conexión con la base de datos debe generar un error. El inicio de sesión false
significa que se debe generar un error al iniciar una sesión; mientras que true
significa que se puede proceder con el inicio de sesión. El valor filename
proporciona el nombre de archivo de la base de datos que se debe adjuntar cuando se inicia una sesión. De esta manera, el usuario puede iniciar una sesión en una base de datos separada haciendo que ésta se adjunte.
En una solicitud, sólo puede aparecer una instancia de sqloptions:initialDatabase. La opción no puede aparecer en una respuesta. La presencia de varias instancias de la opción generará un error.
Si el extremo que recibió la solicitud tiene configurada una base de datos predeterminada, se generará un error. Por razones de seguridad, el cliente no puede especificar el encabezado sqloptions:initialDatabase en los extremos que tienen una base de datos predeterminada.
Si se utilizan sesiones SOAP, esta opción debe aparecer en la misma solicitud que el atributo sqloptions:sqlsession initiate. Si esta opción aparece en cualquier solicitud que tenga el encabezado sqloptions:sqlSession, pero que no contenga también el atributo initiate, se generará un error.
A continuación se muestra un fragmento de esquema correspondiente a la opción sqloptions:initialDatabase:
<xs:element name="initialDatabase" form="qualified">
<xs:annotation>
<xs:documentation>
Set initial database on login.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute use="required" name="value" type="xs:string" form="unqualified">
<xs:annotation>
<xs:documentation>
The name of the initial database to attach to.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute
name="optional"
default="false"
type="xs:boolean"
form="unqualified">
<xs:annotation>
<xs:documentation>
Whether the initial database is optional or not.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="filename" type="xs:string" form="unqualified">
<xs:annotation>
<xs:documentation>
The filename of the database to attach.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
Ejemplos
A continuación se muestran ejemplos de utilización del encabezado sqloptions:initialDatabase
en mensajes de solicitud y respuesta de SOAP.
Solicitud
<SOAP-ENV:Envelope xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:sql="https://schemas.microsoft.com/sqlserver/2004/SOAP"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sqlparam="https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlParameter"
xmlns:sqlsoaptypes="https://schemas.microsoft.com/sqlserver/2004/SOAP/types"
xmlns:sqloptions="https://schemas.microsoft.com/sqlserver/2004/SOAP/Options">
<SOAP-ENV:Header>
<sqloptions:initialDatabase SOAP-ENV:mustUnderstand="1"
value="dbTestForAttaching"
optional="false"
filename="!DBDATADIR!\dbTestForAttaching.mdf" />
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<sql:sqlbatch>
<sql:BatchCommands>
SELECT name FROM sys.databases WHERE database_id=(SELECT dbid FROM master.dbo.sysprocesses WHERE spid=@@spid)
SELECT TOP 1 object_id FROM sys.objects WHERE object_id=(SELECT TOP 1 object_id FROM dbTestForAttaching.sys.objects)
</sql:BatchCommands>
</sql:sqlbatch>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta
<SOAP-ENV:Envelope xml:space="preserve"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:sql="https://schemas.microsoft.com/sqlserver/2004/SOAP"
xmlns:sqlsoaptypes="https://schemas.microsoft.com/sqlserver/2004/SOAP/types"
xmlns:sqlrowcount="https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlRowCount"
xmlns:sqlmessage="https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlMessage"
xmlns:sqlresultstream="https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlResultStream"
xmlns:sqltransaction="https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlTransaction"
xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes">
<SOAP-ENV:Body>
<sql:sqlbatchResponse>
<sql:sqlbatchResult>
<sqlresultstream:SqlRowSet xsi:type="sqlsoaptypes:SqlRowSet">
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<SqlRowSet1 xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">
<row>
<name>dbTestForAttaching</name>
</row>
</SqlRowSet1>
</diffgr:diffgram>
</sqlresultstream:SqlRowSet>
<sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount">
<sqlrowcount:Count>1</sqlrowcount:Count>
</sqlresultstream:SqlRowCount>
<sqlresultstream:SqlRowSet xsi:type="sqlsoaptypes:SqlRowSet">
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<SqlRowSet2 xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2">
<row>
<object_id>val</object_id>
</row>
</SqlRowSet2>
</diffgr:diffgram>
</sqlresultstream:SqlRowSet>
<sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount">
<sqlrowcount:Count>1</sqlrowcount:Count>
</sqlresultstream:SqlRowCount>
</sql:sqlbatchResult>
</sql:sqlbatchResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>