Compartir a través de


Cómo incrustar SQL Server Express en una aplicación (es-ES)

Destinatarios: los desarrolladores de aplicaciones que necesitan distribuir SQL Server Express con una aplicación con el fin de proporcionar almacenamiento de datos mediante una base de datos de SQL Server.

Si su aplicación utiliza SQL Server Express a su base de datos de host, puede redistribuir libremente del producto de SQL Server Express con su aplicación. Este artículo contiene información y enlaces que le permitirán correctamente incrustar SQL Server Express como parte de la instalación de la aplicación.

NOTA: Esta página es un artículo de código auxiliar y no contienen información todo planificado.

Lista de tareas (Stub)

  • Crear ejemplos de C++

Temas tratados en este artículo

Edición de SQL Server Express para uso

Existen varias ediciones de SQL Server Express, desde una base de datos sólo instale en base de datos, servicios avanzados e instalación de herramientas de administración.

SQL Server 2008R2 Express Management Studio Basic Tiempo de ejecución sólo con herramientas con servicios avanzados

Motor de base de datos SQL Server

X

X

X

SQL Server Management Studio Basic

X

X

X

Búsqueda de texto completo

X

Reporting Services

X

Tamaño de la descarga

38.5 MB

82,5 MB

230.4 MB

546.5 MB

Estas cuatro ediciones de SQL Server 2008R2 incluyen las siguientes funcionalidades y capacidades.

SQL Server 2008R2 Express con herramientas

  • Motor de base de datos SQL Server – para crear, almacenar, actualizar y recuperar datos
  • SQL Server Management Studio Basic – una herramienta de gestión de base de datos visual para crear, editar y gestionar bases de datos

SQL Server 2008 Express with Advanced Services

  • SQL Server Database Engine - para crear, almacenar, actualizar y recuperar datos
  • SQL Server Management Studio Basic – una herramienta de gestión de base de datos visual para crear, editar y gestionar bases de datos
  • Búsqueda de texto completo: un motor potente, alta velocidad para buscar datos basados en texto
  • Reporting Services – un entorno de diseño integrado para la creación de informes

SQL Server 2008R2 Express (sólo Runtime)

SQL Server Database Engine - para crear, almacenar, actualizar y recuperar datos

SQL Server 2008R2 Management Studio Express (SSMSE)

  • Herramienta de administración gráfica libre para configurar, gestionar y administrar SQL Server 2008R2 Express aplicaciones
  • También se utiliza para administrar múltiples instancias del SQL Server Database Engine creado por cualquier edición de SQL Server 2008R2, incluyendo el grupo de trabajo, Web, Standard y Enterprise editions
NOTA: Esta descarga aparte es para clientes que previamente han instalado SQL Server 2008R2 Express (sólo en tiempo de ejecución). Para instalaciones nuevas de SQL Server 2008R2 Express y SQL Server Management Studio Express, descargar el SQL Server 2008R2 Express con herramientas desde el Asistente para la instalación de SQL Server.

Para obtener más información acerca de SQL Server 2008R2 Express, vaya al sitio de Web Express de 2008R2 de SQL Server (http://www.microsoft.com/sqlserver/2008/en/us/express.aspx).

Para descargar SQL Server 2008R2 Express, vaya a la página de descarga (http://www.microsoft.com/express/sql/download/).

Cómo registrarse para obtener derechos de redistribución de SQL Server Express

Antes de incrustar SQL Server 2008R2 Express en su aplicación, usted debe obtener una licencia con el fin de redistribuir la edición Express. La licencia es libre y puede obtenerse por ir a la página de registro de licencia (http://www.microsoft.com/sqlserver/2008/en/us/express/redistregister.aspx).

Volver al comienzo

Cómo detectar las instalaciones anteriores de SQL Server

Antes de realizar una instalación de SQL Server, usted debe primero comprobar para ver si ya está instalado SQL Server en el equipo de destino. La manera recomendada para comprobar una instalación de SQL Server, y qué instancias están presentes es utilizar WMI. El código de VB y C# siguiente muestra cómo realizar esto.

C#

using System;
 
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ExpressDetection
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!EnumerateSQLInstances())
            {
                Console.WriteLine("There are no instances of SQL Server 2005 or SQL Server 2008 installed");
            }
        }
        /// <summary>
        /// Enumerates all SQL Server instances on the machine.
        /// </summary>
        /// <returns></returns>
        public static bool EnumerateSQLInstances()
        {
            string correctNamespace = GetCorrectWmiNameSpace();
            if (string.Equals(correctNamespace, string.Empty))
            {
                return false;
            }
            string query = string.Format("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = 'instanceID'");
            ManagementObjectSearcher getSqlEngine = new ManagementObjectSearcher(correctNamespace, query);
            if (getSqlEngine.Get().Count == 0)
            {
                return false;
            }
            Console.WriteLine("SQL Server database instances discovered :");
            string instanceName = string.Empty;
            string serviceName = string.Empty;
            string version = string.Empty;
            string edition = string.Empty;
            Console.WriteLine("Instance Name \t ServiceName \t Edition \t Version \t");
            foreach (ManagementObject sqlEngine in getSqlEngine.Get())
            {
                serviceName = sqlEngine["ServiceName"].ToString();
                instanceName = GetInstanceNameFromServiceName(serviceName);
                version = GetWmiPropertyValueForEngineService(serviceName, correctNamespace, "Version");
                edition = GetWmiPropertyValueForEngineService(serviceName, correctNamespace, "SKUNAME");
                Console.Write("{0} \t", instanceName);
                Console.Write("{0} \t", serviceName);
                Console.Write("{0} \t", edition);
                Console.WriteLine("{0} \t", version);
            }
            return true;
        }
        /// <summary>
        /// Method returns the correct SQL namespace to use to detect SQL Server instances.
        /// </summary>
        /// <returns>namespace to use to detect SQL Server instances</returns>
        public static string GetCorrectWmiNameSpace()
        {
            String wmiNamespaceToUse = "root\\Microsoft\\sqlserver";
            List<string> namespaces = new List<string>();
            try
            {
                // Enumerate all WMI instances of
                // __namespace WMI class.
                ManagementClass nsClass =
                    new ManagementClass(
                    new ManagementScope(wmiNamespaceToUse),
                    new ManagementPath("__namespace"),
                    null);
                foreach (ManagementObject ns in
                    nsClass.GetInstances())
                {
                    namespaces.Add(ns["Name"].ToString());
                }
            }
            catch (ManagementException e)
            {
                Console.WriteLine("Exception = " + e.Message);
            }
            if (namespaces.Count > 0)
            {
                if (namespaces.Contains("ComputerManagement10"))
                {
                    //use katmai+ namespace
                    wmiNamespaceToUse = wmiNamespaceToUse + "\\ComputerManagement10";
                }
                else if (namespaces.Contains("ComputerManagement"))
                {
                    //use yukon namespace
                    wmiNamespaceToUse = wmiNamespaceToUse + "\\ComputerManagement";
                }
                else
                {
                    wmiNamespaceToUse = string.Empty;
                }
            }
            else
            {
                wmiNamespaceToUse = string.Empty;
            }
            return wmiNamespaceToUse;
        }
        /// <summary>
        /// method extracts the instance name from the service name
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public static string GetInstanceNameFromServiceName(string serviceName)
        {
            if (!string.IsNullOrEmpty(serviceName))
            {
                if (string.Equals(serviceName, "MSSQLSERVER", StringComparison.OrdinalIgnoreCase))
                {
                    return serviceName;
                }
                else
                {
                    return serviceName.Substring(serviceName.IndexOf('$') + 1, serviceName.Length - serviceName.IndexOf('$') - 1);
                }
            }
            else
            {
                return string.Empty;
            }
        }
        /// <summary>
        /// Returns the WMI property value for a given property name for a particular SQL Server service Name
        /// </summary>
        /// <param name="serviceName">The service name for the SQL Server engine serivce to query for</param>
        /// <param name="wmiNamespace">The wmi namespace to connect to </param>
        /// <param name="propertyName">The property name whose value is required</param>
        /// <returns></returns>
        public static string GetWmiPropertyValueForEngineService(string serviceName, string wmiNamespace, string propertyName)
        {
            string propertyValue = string.Empty;
            string query = String.Format("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = '{0}' and ServiceName = '{1}'", propertyName, serviceName);
            ManagementObjectSearcher propertySearcher = new ManagementObjectSearcher(wmiNamespace, query);
            foreach (ManagementObject sqlEdition in propertySearcher.Get())
            {
                propertyValue = sqlEdition["PropertyStrValue"].ToString();
            }
            return propertyValue;
        }
    }
}

VB.NET

Imports System.Management
 
Module Program
    Sub Main()
        If Not EnumerateSQLInstances() Then
            Console.WriteLine("No instances")
        End If
    End Sub
    ''' <summary>
    ''' Enumerates all SQL Server instances on the machine.
    ''' </summary>
    ''' <returns></returns>
    Function EnumerateSQLInstances() As Boolean
        Dim correctNamespace As String = GetCorrectWmiNamespace()
        If String.Equals(correctNamespace, String.Empty) Then
            Return False
        End If
        Dim query As String =
            String.Format("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = 'instanceID'")
        Dim getSqlEngine As New ManagementObjectSearcher With {.Scope = New ManagementScope(correctNamespace), .Query = New ObjectQuery(query)}
            If getSqlEngine.Get().Count = 0 Then
                Return False
            End If
            Console.WriteLine("SQL Server database instances disovered :")
            Dim instanceName As String = String.Empty
            Dim serviceName As String = String.Empty
            Dim version As String = String.Empty
            Dim edition As String = String.Empty
            Console.WriteLine("Instance name {0} ServiceName {0} Edition {0} Version {0}", vbTab)
            For Each sqlEngine As ManagementObject In getSqlEngine.Get()
                serviceName = sqlEngine("ServiceName").ToString()
                instanceName = GetInstanceNameFromServiceName(serviceName)
                version = GetWmiPropertyValueForEngineService(serviceName, correctNamespace, "Version")
                edition = GetWmiPropertyValueForEngineService(serviceName, correctNamespace, "SKUNAME")
                Console.Write("{0} {1}", instanceName, vbTab)
                Console.Write("{0} {1}", serviceName, vbTab)
                Console.Write("{0} {1}", edition, vbTab)
                Console.WriteLine("{0} {1}", version, vbTab)
            Next
            Return True
    End Function
    ''' <summary>
    ''' Method returns the correct SQL namespace to use to detect SQL Server instances.
    ''' </summary>
    ''' <returns>namespace to use to detect SQL Server instances</returns>
    Function GetCorrectWmiNamespace() As String
        Dim wmiNamspaceToUse As String = "root\Microsoft\SqlServer"
        Dim namespaces As New List(Of String)
        Try
            'Enumerate all WMI instances of
            '__namespace WMI class.
            Dim nsClass As New ManagementClass With {.Scope = New ManagementScope(wmiNamspaceToUse), .Path = New ManagementPath("__namespace")}
            For Each ns As ManagementObject In nsClass.GetInstances()
                namespaces.Add(ns("Name").ToString())
            Next
        Catch ex As ManagementException
            Console.WriteLine("Exception = %1", ex.Message)
        End Try
        If namespaces.Count > 0 Then
            If namespaces.Contains("ComputerManagement10") Then
                'use Katmai+ namespace
                wmiNamspaceToUse = wmiNamspaceToUse + "\ComputerManagement10"
            ElseIf namespaces.Contains("ComputerManagement") Then
                'use Yukon namespace
                wmiNamspaceToUse = wmiNamspaceToUse + "\ComputerManagement"
            End If
        Else
            wmiNamspaceToUse = String.Empty
        End If
        Return wmiNamspaceToUse
    End Function
    ''' <summary>
    ''' method extracts the instance name from the service name
    ''' </summary>
    ''' <param name="serviceName"></param>
    ''' <returns></returns>
    Function GetInstanceNameFromServiceName(ByVal serviceName As String) As String
        If Not String.IsNullOrEmpty(serviceName) Then
            If String.Equals(serviceName, "MSSQLSERVER", StringComparison.OrdinalIgnoreCase) Then
                Return serviceName
            Else
                Return serviceName.Substring(serviceName.IndexOf("$"c) + 1, serviceName.Length - serviceName.IndexOf("$"c) - 1)
            End If
        Else
            Return String.Empty
        End If
    End Function
    ''' <summary>
    ''' Returns the WMI property value for a given property name for a particular SQL Server service Name
    ''' </summary>
    ''' <param name="serviceName">The service name for the SQL Server engine serivce to query for</param>
    ''' <param name="wmiNamespace">The wmi namespace to connect to </param>
    ''' <param name="propertyName">The property name whose value is required</param>
    ''' <returns></returns>
    Function GetWmiPropertyValueForEngineService(ByVal serviceName As String, ByVal wmiNamespace As String, ByVal propertyName As String) As String
        Dim propertyValue As String = String.Empty
        Dim query As String = String.Format("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = '{0}' and ServiceName = '{1}'", propertyName, serviceName)
        Dim propertySearcher As New ManagementObjectSearcher With {.Scope = New ManagementScope(wmiNamespace), .Query = New ObjectQuery(query)}
        For Each sqlEdition As ManagementObject In propertySearcher.Get()
            propertyValue = sqlEdition("PropertyStrValue").ToString()
        Next
        Return propertyValue
    End Function
End Module

C++

#include "stdafx.h"
 
 
#include <comdef.h>
 
#include <iostream>
 
using namespace std;
 
#include <windows.h>
 
#include <assert.h>
 
#include <wbemidl.h>
 
 
 
HRESULT InitializeCOMandCOMSecurity();
 
IWbemServices* GetSQLServerWMIConnection();
 
void EnumerateSQLInstances(IWbemServices* pSvc);
 
_bstr_t GetInstanceNameFromServiceName(_bstr_t serviceName);
 
_bstr_t GetWmiPropertyValueForEngineService(_bstr_t serviceName, _bstr_t propertyName, IWbemServices* pSvc);
 
 
int _tmain(int argc, _TCHAR* argv[])
 
{
 
    HRESULT hres;
 
    IWbemServices *pSvc = NULL;
 
 
    //initialize COM and COM Security
 
    if (FAILED(hres=InitializeCOMandCOMSecurity()))
 
    {     
 
        return hres;                
 
    }
 
 
    if ((pSvc=GetSQLServerWMIConnection()) == NULL)
 
    {
 
        return -1;
 
    }
 
 
    EnumerateSQLInstances(pSvc);
 
  
 
    // Cleanup
 
    if (pSvc != NULL)
 
        pSvc->Release();
 
 
    CoUninitialize();
 
    return 0;
 
}
 
 
/// <summary>
 
/// Initializes COM and COM security
 
/// </summary>
 
/// <returns>If COM or COM security initialization fails, a failure code; otherwise, zero.</returns>
 
HRESULT InitializeCOMandCOMSecurity()
 
{
 
  HRESULT hres;
 
 
  hres =  CoInitializeEx(0, COINIT_MULTITHREADED); // Initialize COM.
 
  if (FAILED(hres))
 
  {
 
     cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;
 
     return hres;                  // Program has failed.
 
  }
 
 
  hres =  CoInitializeSecurity(NULL, -1, NULL, NULL,
 
      RPC_C_AUTHN_LEVEL_CONNECT, 
 
      RPC_C_IMP_LEVEL_IMPERSONATE, 
 
      NULL, EOAC_NONE, 0
 
      );
 
 
  if (FAILED(hres))
 
  {
 
     cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;
 
     CoUninitialize();
 
     return hres;                  // Program has failed.
 
  }
 
 
  return hres;
 
}
 
 
/// <summary>
 
/// Connects to the SQL Server WMI namespace
 
/// </summary>
 
/// <returns>If successful, a pointer to the IWebmServices object bound to the namespace; otherwise, null</returns>
 
IWbemServices* GetSQLServerWMIConnection()
 
{
 
  HRESULT hres;
 
  IWbemLocator *pLoc = NULL;
 
  IWbemServices *pSvc = NULL;
 
 
  // Get IWbemLocator object which is used to connect to WMI namespaces
 
  hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc); 
 
  if (FAILED(hres))
 
  {
 
      cout << "Failed to create IWbemLocator object used for namespace connections. Err code = 0x" << hex << hres << endl;
 
      return NULL;     // Program has failed.
 
  }
 
   
 
  // Attempt to connect to root\Microsoft\SQLServer\ComputerManagement10 (katmai+)
 
  _bstr_t bstrNamespace("\\\\.\\root\\Microsoft\\SqlServer\\ComputerManagement10");
 
 
  hres = pLoc->ConnectServer(
 
          bstrNamespace, 
 
          NULL,
 
          NULL,
 
          0,                                  
 
          0,
 
          0,                                  
 
          0,                                  
 
          &pSvc
 
          );
 
  //if \ComputerManagement10 failed, try \ComputerManagement (yukon)
 
  if (FAILED(hres))
 
  {
 
      cout << "Could not connect to \\\\.\\root\\Microsoft\\SqlServer\\ComputerManagement10. Error code = 0x"
 
           << hex << hres << endl << "Trying \\\\.\\root\\Microsoft\\SqlServer\\ComputerManagement" << endl;
 
 
      bstrNamespace = "\\\\.\\root\\Microsoft\\SqlServer\\ComputerManagement";
 
 
      hres = pLoc->ConnectServer(
 
              bstrNamespace, 
 
              NULL,
 
              NULL,
 
              0,                                  
 
              0,
 
              0,                                  
 
              0,                                  
 
              &pSvc
 
              );
 
      //if \ComputerManagement failed, return a null
 
      if (FAILED(hres))
 
      {
 
          cout << "Could not connect to \\\\.\\root\\Microsoft\\SqlServer\\ComputerManagement. Error code = 0x"
 
               << hex << hres << endl;
 
 
          pSvc = NULL;
 
      }
 
      else
 
      {
 
          cout << endl << "Connected to " << (char*)bstrNamespace << endl << endl;
 
      }
 
  }
 
  else
 
  {
 
      cout << endl << "Connected to " << (char*)bstrNamespace << endl << endl;
 
  }
 
 
  pLoc->Release();     
 
  return pSvc;  
 
}
 
 
/// <summary>
 
/// Enumerate SQL Server Instances
 
/// </summary>
 
/// <param name="pSvc">pointer to the IWebmServices object bound to the interface</para>
 
/// <returns></returns>
 
void EnumerateSQLInstances(IWbemServices* pSvc)
 
{
 
  _bstr_t bstrWQL(L"WQL");
 
  // WQL to retrieve the instance information
 
  _bstr_t bstrQuery(L"SELECT * FROM SqlServiceAdvancedProperty WHERE SQLServiceType = 1 AND PropertyName = 'instanceID'");
 
 
  _bstr_t bstrTemp;
 
  _bstr_t serviceName;
 
  _bstr_t instanceName;
 
  _bstr_t version;
 
  _bstr_t edition;
 
 
  IEnumWbemClassObject* pEnum = NULL;
 
  IWbemClassObject* pObject = NULL;
 
 
  ULONG count;
 
  HRESULT hres;
 
 
  // First lets get all the ServiceName info from the SQL properties.
 
  HRESULT hr = pSvc->ExecQuery(bstrWQL,bstrQuery,WBEM_FLAG_RETURN_IMMEDIATELY|WBEM_FLAG_FORWARD_ONLY,NULL,&pEnum);
 
 
  _variant_t vt;
 
 
  if (SUCCEEDED(hr))
 
  {
 
    // Enumerate the ServiceName result set and get information for each related instance ===//
 
    while (SUCCEEDED(pEnum->Next(10000,1,&pObject,&count)) && count)
 
    {
 
        if (FAILED(hres=pObject->Get(L"ServiceName",0,&vt,NULL,NULL)))
 
        {
 
        cout << "Failed to get some ServiceName info. Error code = 0x" << hex << hres << endl;
 
        continue;
 
        }
 
        else
 
        {
 
            serviceName = vt.bstrVal;
 
            // Get the instance name
 
            instanceName = GetInstanceNameFromServiceName(serviceName);
 
        }
 
 
        pObject->Release();
 
        pObject = NULL;
 
 
        // Get the version and edition
 
        version = GetWmiPropertyValueForEngineService(serviceName, L"Version", pSvc);
 
        edition = GetWmiPropertyValueForEngineService(serviceName, L"SKUNAME", pSvc);
 
 
        cout << "Service Name: " << serviceName << endl;
 
        cout << "Instance Name: " << instanceName << endl;
 
        cout << "Version: " << version << endl;
 
        cout << "Edition: " << edition << endl << endl;
 
    }
 
    pEnum->Release();
 
    pEnum = NULL;
 
  }
 
}
 
 
/// <summary>
 
/// method extracts the instance name from the service name
 
/// </summary>
 
/// <param name="serviceName"></param>
 
/// <returns></returns>
 
_bstr_t GetInstanceNameFromServiceName(_bstr_t serviceName)
 
{
 
    _variant_t vt;
 
    _bstr_t instanceName;
 
    std::wstring str = serviceName;
 
 
    //Check for the presence of an instance name
 
    if(!str.empty())
 
    {
 
        wstring::size_type idx, len;
 
        len = str.size();
 
        //$ seperates servicename from instance name
 
        idx = str.find_first_of(L"$");
 
        if(idx!=std::wstring::npos)
 
        {
 
            instanceName = str.substr(idx+1,len-idx).c_str();
 
        }
 
        else
 
        {
 
            // Assume it's the default instance
 
            instanceName=serviceName;
 
        }
 
    }
 
    else
 
        instanceName=L"";
 
 
    return instanceName;
 
}
 
 
/// <summary>
 
/// Returns the WMI property value for a given property name for a particular SQL Server service Name
 
/// </summary>
 
/// <param name="serviceName">The service name for the SQL Server engine serivce to query for</param>
 
/// <param name="propertyName">The property name whose value is required</param>
 
/// <param name="pSvc">Pointer to the WMI service instance</param>
 
/// <returns></returns>
 
_bstr_t GetWmiPropertyValueForEngineService(_bstr_t serviceName, _bstr_t propertyName, IWbemServices* pSvc)
 
{
 
    HRESULT hres;
 
    _variant_t vt;
 
    _bstr_t bstrWQL(L"WQL");
 
    _bstr_t bstrQuery, bstr;
 
    IEnumWbemClassObject* pEnum = NULL;
 
    IWbemClassObject* pObject = NULL;
 
    ULONG count;
 
 
    // Build the WQL statement
 
    bstrQuery = L"select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = '";
 
    bstrQuery += propertyName;
 
    bstrQuery += "' and ServiceName = '";
 
    bstrQuery += serviceName;
 
    bstrQuery += L"'";
 
 
      if (SUCCEEDED(pSvc->ExecQuery(bstrWQL,bstrQuery,WBEM_FLAG_RETURN_IMMEDIATELY|WBEM_FLAG_FORWARD_ONLY,NULL,&pEnum)))
 
      {
 
        while (SUCCEEDED(pEnum->Next(10000,1,&pObject,&count)) && count)
 
        {
 
            if (FAILED(hres=pObject->Get(L"PropertyStrValue",0,&vt,NULL,NULL)))
 
            {
 
                cout << "Failed to get some info. Error code = 0x" << hex << hres << endl;
 
            }
 
            else
 
            {
 
                // get the value
 
                bstr = vt.bstrVal;
 
            }
 
            pObject->Release();
 
            pObject = NULL;
 
        }
 
        pEnum->Release();
 
        pEnum = NULL;
 
    }
 
 
    return bstr;
 
}
NOTA: Cuando la comprobación para las instalaciones anteriores de SQL Server, debe comprobar si los espacios de nombres de la root\Microsoft\SqlServer\ComputerManagement y el root\Microsoft\SqlServer\ComputerManagement10 ; Instancias de SQL Server 2005 utilizan el espacio de nombres root\Microsoft\SqlServer\ComputerManagement , mientras que el uso de SQL Server 2008 root\Microsoft\SqlServer\ComputerManagement10.

Para obtener más información acerca de cómo solucionar problemas con WMI, consulte Windows Management Instrumentation (http://msdn.microsoft.com/en-us/library/aa394582 (VS.85) .aspx ).

Las acciones a tomar si se encuentra una instalación previa de SQL Server dependen de sus necesidades de aplicación. Si su aplicación utiliza una determinada instancia con nombre y ya existe, esto puede indicar que la aplicación se instaló anteriormente. En este caso puede necesitar para realizar la verificación de la base de datos, eliminar, o actualizarlo. Si una versión anterior de SQL Server 2008R2 que Express se encuentra, puede realizar una instalación de la actualización de Express, o si la aplicación admite múltiples versiones de Express puede continuar la instalación sigue los pasos de instalación específicos de versión.

Volver al comienzo

Cómo incrustar SQL Server Express

Existen dos métodos recomendados para incluir SQL Server Express como parte de su aplicación:

  1. Instalar SQL Server Express mediante el instalador de plataforma Web (WPI)
  2. Incluir el paquete de SQL Server Express en sus medios de distribución e invocar directamente setup.exe
NOTA: Actualmente la Web Platform Installer no proporciona una manera de actualizar una instalación existente de SQL Server.

Mientras que ambos métodos proporcionan un método de instalación de SQL Server 2008R2 Express como parte de su aplicación, existen consideraciones diferentes para cada uno. Antes de comprometerse a uno u otro, lea atentamente la siguiente información.

Función/requisito Instalador de plataforma de Windows Instalación SETUP.exe
Interacción del usuario durante la instalación Mínima Ninguno para alta complejidad
Opciones de instalación personalizable Ninguno: opciones de configuración predeterminadas Altamente personalizable
Complejidad de la integración con la instalación de la aplicación Mínima Mínima o muy compleja
Actualización de las versiones anteriores No
Requiere archivos de SQL Server 2008 Express en el medio de instalación de la aplicación No se puede instalar sobre una conexión a Internet
Códigos de salida que proporcionan el éxito o el fracaso de la instalación ?

Invocar directamente setup.exe requiere que el desarrollador de aplicaciones para especificar las opciones que se utilizarán durante la instalación, o con el usuario que realiza la instalación para seleccionarlos.

Instalación utilizando al instalador de plataforma Web

El instalador de plataforma Web puede utilizarse para instalar SQL Server Express con un mínimo de intervención del usuario, utilizando los ajustes más comunes como el predeterminado. Hay varias maneras de invocar a la Web Platform Installer que resultará en una instalación de SQL Server Express:

De los tres métodos, utilizando la Galería de Web App es el método recomendado, ya que esto será no sólo instalar SQL Server Express, sino que también Instale el instalador de plataforma Web si no está ya presente en el equipo.

NOTA: Mientras que el instalador de plataforma Web normalmente descarga e instala SQL Server 2008R2 Express de internet, hay una manera de obligarlo a instalar los archivos de un sistema de archivos local. Para más información, consulte allí es una forma de obtener WebPI para instalar productos de un modo sin conexión.

Al instalar Express con WPI, puede seleccionar la edición de SQL Server 2008R2 Express para instalarse especificando un valor de ID de producto como parámetro de WPI. En la tabla siguiente se enumeran las ediciones disponibles, sus características y los valores de ID de producto asociado.

SQL Server 2008R2 Express Management Studio Basic Tiempo de ejecución sólo con herramientas con servicios avanzados

Motor de base de datos SQL Server

X

X

X

SQL Server Management Studio Basic

X

X

X

Búsqueda de texto completo

X

Reporting Services

X

ID de producto

SQLManagementStudio

SQLExpress

SQLExpressTools

SQLExpressAdv

Mediante el ejecutable WPI

Sintaxis: WebPlatformInstaller.exe /id < id del producto > [& < id del producto >...][? < id de archivo > [& < id de archivo >...]][? < id de idioma >]

Ejemplos:

Comando Resultado
WebPlatformInstaller.exe /id SQLExpress Instala SQL Server Express
/Id WebPlatformInstaller.exe SQLExpressAdv Instala SQL Server Express con Advanced Services

C#

System.Diagnostics.Process.Start(@"C:\Program Files\Microsoft\Web Platform Installer\webplatforminstaller.exe"," /id SQLExpress");

VB.NET

System.Diagnostics.Process.Start("C:\Program Files\Microsoft\Web Platform Installer\webplatforminstaller.exe"," /id SQLExpress")

C++

STARTUPINFO si;
 
PROCESS_INFORMATION pi;
 
 
ZeroMemory( &si, sizeof(si) );
 
si.cb = sizeof(si);
 
ZeroMemory( &pi, sizeof(pi) );
 
 
CreateProcess(L"C:\\Program Files\\Microsoft\\Web Platform Installer\\webplatforminstaller.exe",
 
    L" /id SQLExpress", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

Utilizando el controlador de WPI

Sintaxis: wpi: / / < id del producto > [& < id del producto >...][? < id de archivo > [& < id de archivo >...]][? < id de idioma >]

Ejemplos:

Comando Resultado
WPI: / / SQLExpress Instala SQL Server Express
WPI: / / SQLExpressAdv Instala SQL Server Express con Advanced Services

C#

System.Diagnostics.Process.Start("wpi://SQLExpress/");

VB.NET

System.Diagnostics.Process.Start("wpi://SQLExpress/")

Utilizando la Galería de Web App

¿Sintaxis: http://www.microsoft.com/web/gallery/install.aspx?\[appsxml = < id de archivo >][& appsxml = < id de archivo >...]AppID = < id de producto > [3b % < id del producto >...][& applang = < id de idioma >]

Ejemplos:

Comando Resultado
http://www.Microsoft.com/Web/Gallery/Install.aspx?appsxml=&AppID=SQLEXPRESS Instala SQL Server Express
http://www.Microsoft.com/Web/Gallery/Install.aspx?appsxml=&AppID=SQLExpressAdv Instala SQL Server Express con Advanced Services

C#

System.Diagnostics.Process.Start("http://www.microsoft.com/web/gallery/install.aspx?appsxml=&appid=SQLExpress");

VB.NET

System.Diagnostics.Process.Start("http://www.microsoft.com/web/gallery/install.aspx?appsxml=&appid=SQLExpress")

Avanzadas de instalación (Setup.exe)

En casos donde es necesario un mayor control sobre las opciones de instalación de SQL Server Express, puede proporcionar los archivos extraídos de instalación Express con su aplicación y lanzamiento setup.exe directamente.

Para extraer el SQL Server 2008R2 Express paquete descargado desde http://www.microsoft.com/express/sql/download , ejecute el siguiente comando:

{Paquete express} /X: {directorio para extraer a}

Ejemplo:

SQLEXPRWT_x86_ENU /X:c:\ExpressSetup

Opciones de instalación

Al instalar SQL Server Express con setup.exe, puede especificar opciones de configuración ya sea usando los parámetros pasados a setup.exe o mediante un archivo de configuración. A pesar de que los parámetros de setup.exe y los métodos de instalación del archivo de configuración ofrecen una funcionalidad similar (es decir, tienen las mismas opciones disponibles), su aplicación difiere. El ConfigurationFile.ini almacena la configuración de entradas de usuario para la instalación específica (aplicables a la instalación actual de lugares públicos).

Puede utilizar el archivo de configuración para reiniciar la instalación utilizando la configuración de usuario de una instalación anterior. La única configuración que no se guardan en el archivo de configuración es las contraseñas para las cuentas y el producto ID (PID). Cuando sea necesario, puede agregar estos parámetros mediante el archivo de configuración, en un símbolo del sistema, o a través de un mensaje de la interfaz de usuario.

Ejemplos:

Línea de comandos

Setup.exe /q /Action=Install /Hideconsole /IAcceptSQLServerLicenseTerms=True 
/Features=SQL,Tools /InstanceName=SQLExpress 
/SQLSYSADMINACCOUNTS="Builtin\Administrators" /SQLSVCACCOUNT="<DomainName\UserName>" /SQLSVCPASSWORD="<StrongPassword>

C#
System.Diagnostics.Process processObj = System.Diagnostics.Process.Start(@"c:\temp\sqlsetup\setup.exe",@"/q /Action=Install /Hideconsole /IAcceptSQLServerLicenseTerms=True /Features=SQL,Tools /InstanceName=SQLExpress /SQLSYSADMINACCOUNTS=""Builtin\Administrators"" /SQLSVCACCOUNT=""DomainName\UserName"" /SQLSVCPASSWORD=""StrongPassword""");

VB.NET

System.Diagnostics.Process processObj = System.Diagnostics.Process.Start("c:\temp\sqlsetup\setup.exe",
"/q /Action=Install /Hideconsole /IAcceptSQLServerLicenseTerms=True /Features=SQL,Tools /InstanceName=SQLExpress /SQLSYSADMINACCOUNTS=""Builtin\Administrators"" /SQLSVCACCOUNT=""DomainName\UserName"" /SQLSVCPASSWORD=""StrongPassword""")

C++

STARTUPINFO si;
 
PROCESS_INFORMATION pi;
 
 
ZeroMemory( &si, sizeof(si) );
 
si.cb = sizeof(si);
 
ZeroMemory( &pi, sizeof(pi) );
 
 
CreateProcess(L"c:\\temp\\sqlsetup\\setup.exe",
 
    L" /q /Action=Install /Hideconsole /IAcceptSQLServerLicenseTerms=True /Features=SQL,Tools /InstanceName=SQLExpress /SQLSYSADMINACCOUNTS=\"Builtin\\Administrators\" /SQLSVCACCOUNT=\"DomainName\\UserName\" /SQLSVCPASSWORD=\"StrongPassword\"",
 
    NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

Parámetros de línea de comandos

En los ejemplos anteriores:

  • / q: especifica que la instalación ejecutar en un modo silencioso sin interfaz de usuario.
  • Acción – especifica que acción realizar. En este ejemplo, la acción es instalar.
  • / Hideconsole: especifica que la ventana de la consola está oculta o cerrada durante la instalación.
  • / IAcceptSQLServerLicenseTerms - indica la aceptación de los términos de licencia de Microsoft SQL Server.
  • / Características – especifica cuál de los padres presenta y ofrece para instalar. En este ejemplo, la función de padre está instalado SQL, que incluye componentes SQLEngine, replicación y Fulltext. La función de herramientas instala todos los componentes de herramientas.
  • / InstanceName: especifica un nombre de instancia de SQL Server.
  • / Inicios de –provisions SQLSYSADMINACCOUNTS a ser miembros de la función de los administradores de sistema.
  • / SQLSVCACCOUNT: especifica la cuenta de inicio del servicio SQL Server.
  • / SQLSVCPASSWORD: especifica la contraseña para SQLSVCACCOUNT.

La tabla siguiente contiene la lista de parámetros disponibles para SQL Server 2008R2 Express, que es una lista parcial de todos los parámetros en SQL Server 2008R2. Los parámetros marcados con una x son típicos para SQL Server 2008R2 Express embedded instalaciones. Los parámetros con no x no se suelen utilizar para instalaciones comunes de SQL Server Express. Para una lista completa de todos los parámetros disponibles con SQL Server 2008R2, consulte http://msdn.microsoft.com/en-us/library/ms144259 (v=SQL.105) .aspx .

Parámetro

Descripción Parámetro típico

/ AddCurrentUserAsSQLAdmin

Opcional

Agrega el usuario actual a la función de servidor fija sysadmin de SQL Server. Puede utilizar el parámetro /ADDCURRENTUSERASSQLADMIN al instalar las ediciones Express o cuando /Role = se utiliza ALLFeatures_WithDefaults. Para obtener más información, consulte /ROLE .

Uso de /ADDCURRENTUSERASSQLADMIN es opcional, pero es necesario /ADDCURRENTUSERASSQLADMIN o /SQLSYSADMINACCOUNTS. Valores predeterminados:

  • True para las ediciones de SQL Server Express
  • False para todas las otras ediciones

X

ACCIÓN

Obligatorio

Necesario para indicar el flujo de trabajo de instalación.

Valores admitidos:

  • Instalar

X

/ CONFIGURATIONFILE

Opcional

Especifica la ConfigurationFile a utilizar.

/ ERRORREPORTING

Opcional

Especifica el error reporting para SQL Server.

Para obtener más información, consulte declaración de privacidad para el servicio de informes de errores de Microsoft (http://oca.microsoft.com/en/dcp20.asp ).

Valores admitidos:

  • 1 = habilitado
  • 0 = desactivado

/ CARACTERÍSTICAS

Obligatorio

Especifica los componentes a instalar.

  • Elija /FEATURES para especificar los componentes individuales para instalar SQL Server. Para obtener más información, consulte parámetro de función .

X

/ INSTALLSHAREDDIR

Opcional

Especifica un directorio de instalación no predeterminados para componentes compartidos de 64 bits.

/ INSTALLSHAREDWOWDIR

Opcional

Especifica un directorio de instalación no predeterminados para componentes compartidos de 32 bits. Compatible sólo con un sistema de 64 bits.

/ INSTANCEDIR

Opcional

Especifica un directorio de instalación no predeterminados para componentes específicos de la instancia.

/ NOMBREDEINSTANCIA

Obligatorio

Especifica un nombre de instancia de SQL Server.

Para obtener más información, consulte configuración de la instancia .

X

/ Q

Opcional

Especifica que la instalación ejecutar en un modo silencioso sin mostrar mensajes de interfaz de usuario o usuario. Se utiliza para instalaciones desatendidas.

X

/QS

Opcional

Especifica que configuración se ejecuta y muestra el progreso a través de la interfaz de usuario, pero no aceptar ninguna entrada del usuario o mostrar mensajes de error.

/ SQMREPORTING

Opcional

Especifica el uso de la característica informes de SQL Server.

Para obtener más información, consulte declaración de privacidad para el servicio de informes de errores de Microsoft .

Valores admitidos:

  • 1 = habilitado
  • 0 = desactivado

/ HIDECONSOLE

Opcional

Especifica que la ventana de la consola está oculta o cerrada. Si no se especifica, la consola permanece abierta mientras se ejecuta el programa de instalación, que generalmente no es preferido.

X

/ ENABLERANU

Opcional

Permite ejecutar como credenciales para instalaciones de SQL Server Express. Esta opción está desactivada por defecto.

X

/ INSTALLSQLDATADIR

Opcional

Especifica el directorio de datos de archivos de datos de SQL Server.

Valores predeterminados:

  • Para el modo WOW en 64-bit: % archivos de programa (x 86) %ProgramFiles(x86)%\Microsoft SQL Server\

Para todas las demás instalaciones: % programa archivos de programa%\Microsoft SQL Server\

/ SAPWD

Requerido cuando /SECURITYMODE = SQL

Especifica la contraseña para la cuenta de administrador del sistema (sa) de SQL Server.

X

/ SECURITYMODE

Opcional

Especifica el modo de seguridad para SQL Server.

Si no se proporciona este parámetro, se aplica el valor predeterminado de modo de autenticación Windows únicamente. El valor admitido es SQL

X

/ SQLBACKUPDIR

Opcional

Especifica el directorio para los archivos de copia de seguridad.

El valor predeterminado es

<InstallSQLDataDir> \ <SQLInstanceID> \MSSQL\Backup

/ SQLCOLLATION

Opcional

Especifica la configuración de intercalación de SQL Server.

El valor predeterminado es

SQL_Latin1_General_CP1_CS_AS

/ SQLSVCACCOUNT

Obligatorio

Especifica la cuenta de inicio del servicio SQL Server.

X

/ SQLSVCPASSWORD

Obligatorio

Especifica la contraseña para SQLSVCACCOUNT. (Esto es necesario sólo si se utiliza una cuenta local o dominio).

X

/ SQLSVCSTARTUPTYPE

Opcional

Especifica la Inicio modo del servicio SQL Server. Los valores admitidos son:

  • Automático
  • Discapacitados
  • Manual

X

/ RSSVCACCOUNT

Obligatorio

Especifica la cuenta de inicio del servicio servidor de informes. Esto sólo está disponible en el paquete de avanzada Express.

/ RSSVCPASSWORD

Obligatorio

Especifica la contraseña para el servicio del servidor de informes. Esto sólo está disponible en el paquete de avanzada Express. (Se requiere únicamente si se utiliza una cuenta local o dominio).

/ RSSVCSTARTUPTYPE

Opcional

Especifica la Inicio modo del servicio de servidor de informes. Los valores admitidos son:

  • Automático
  • Discapacitados
  • Manual (por defecto)

Esto sólo está disponible en el paquete de avanzada Express.

/ SQLSYSADMINACCOUNTS

Obligatorio

Inicios de sesión de disposiciones a ser miembros de la función sysadmin .

Este parámetro no es necesario si se especifica /AddCurrentUserAsSQLAdmin.

/ SQLTEMPDBDIR

Opcional

Especifica el directorio para los archivos de datos para tempdb. El valor predeterminado es <InstallSQLDataDir> \ <SQLInstanceID> \MSSQL\Data

/ SQLTEMPDBLOGDIR

Opcional

Especifica el directorio para los archivos de registro para tempdb. El valor predeterminado es

<InstallSQLDataDir> \ <SQLInstanceID> \MSSQL\Data

/ SQLUSERDBDIR

Opcional

Especifica el directorio para los archivos de datos para bases de datos de usuario. El valor predeterminado es <InstallSQLDataDir> \ <SQLInstanceID> \MSSQL\Data

/ SQLUSERDBLOGDIR

Opcional

Especifica el directorio para los archivos de registro de bases de datos de usuario. El valor predeterminado es <InstallSQLDataDir> \ <SQLInstanceID> \MSSQL\Data

/ USESYSDB

Opcional

Especifica la ubicación de las bases de datos del sistema de SQL Server utiliza para esta instalación.

No incluya el sufijo \Data en la ruta especificada.

/ FILESTREAMLEVEL

Opcional

Especifica el nivel de acceso para la función FILESTREAM.

Los valores admitidos son:

  • 0 = Desactivar FILESTREAM apoyo para esta instancia. (Este es el valor predeterminado).
  • 1 = Activar FILESTREAM para acceso de Transact-SQL.
  • 2 = Habilitar FILESTREAM para Transact-SQL y file I/O streaming acceso. (Esto no es válido para los escenarios de clúster).
  • 3 = Permitir clientes remotos para tener acceso a datos FILESTREAM de transmisión.

/ FILESTREAMSHARENAME

Opcional

Es necesario cuando FILESTREAMLEVEL es mayor que 1.

Especifica el nombre del recurso compartido de Windows en el que se almacenarán los datos FILESTREAM.

/ FTSVCACCOUNT

Opcional

Especifica la cuenta de servicio del iniciador de filtro de texto completo. El valor predeterminado es la cuenta de servicio Local.

Este parámetro se omite en sistemas operativos Windows Server ® 2008 y Windows Vista ®. ServiceSID se utiliza para ayudar a asegurar la comunicación entre SQL Server y el demonio de filtro de texto completo. Si no se proporcionan los valores, el servicio del iniciador de la FDHOST, que se utiliza para el proceso de host del demonio de filtro, está desactivado. Utilice el administrador de Control SQL Server para cambiar la cuenta de servicio y activar la funcionalidad de texto completo.

/ FTSVCPASSWORD

Opcional

Especifica la contraseña para el servicio del iniciador de filtro de texto completo.

Este parámetro se omite en los sistemas operativos Windows Server 2008 y Windows Vista.

/ NPENABLED

Opcional

Especifica el estado del protocolo Canalizaciones con nombre para el servicio de SQL Server. Los valores admitidos son:

  • 0 = deshabilitar el protocolo Canalizaciones con nombre.
  • 1 = activar el protocolo Canalizaciones con nombre.

Nota: Para habilitar las conexiones remotas, debe habilitar los parámetros NPENABLED o TCPENABLED.

/ TCPENABLED

Opcional

Especifica el estado del protocolo TCP para el servicio de SQL Server. Los valores admitidos son:

  • 0 = deshabilitar el protocolo TCP.
  • 1 = activar el protocolo TCP.

Nota: Para habilitar las conexiones remotas, debe habilitar los parámetros NPENABLED o TCPENABLED.

/ IACCEPTSQLSERVERLICENSETERMS

Obligatorio

Indica la aceptación o rechazo de los términos de la licencia de SQL Server. Los valores admitidos son:

  • True = aceptar términos
  • False = no acepta términos
X

Actualizar a SQL Server Express 2008

También puede utilizar setup.exe para actualizar desde una versión anterior de SQL Server Express; Sin embargo, debe entender el proceso antes de continuar con un plan de actualización. Para obtener más información acerca de cómo actualizar a SQL Server 2008R2 Express, consulte la guía definitiva para la actualización a SQL Server 2008 (http://blogs.technet.com/dataplatforminsider/archive/2008/12/04/ultimate-guide-for-upgrading-to-sql-server-2008.aspx) y consulte Capítulo 10, "Actualizar a SQL Server 2008 Express".

El siguiente es un ejemplo de llevar a cabo una actualización básica:

Setup.exe /q /Hideconsole /ACTION=upgrade /INSTANCENAME=SQLExpress

La tabla siguiente contiene una lista de los parámetros de entrada utilizado para actualizar a SQL Server 2008 Express.

Parámetro Descripción Parámetro típico

ACCIÓN

Obligatorio

Necesario para indicar el flujo de trabajo de instalación.

El valor admitido es de actualización.

X

/ CONFIGURATIONFILE

Opcional

Especifica la ConfigurationFile a utilizar.

/ ERRORREPORTING

Opcional

Especifica el error reporting para SQL Server. Para obtener más información, consulte declaración de privacidad para el servicio de informes de errores de Microsoft (http://oca.microsoft.com/en/dcp20.asp ). Los valores admitidos son:

  • 1 = habilitado
  • 0 = desactivado

X

/ INSTANCEDIR

Opcional

Especifica un directorio de instalación no predeterminados para componentes compartidos

/ NOMBREDEINSTANCIA

Obligatorio

Especifica un nombre de instancia de SQL Server.

Para obtener más información, consulte configuración de la instancia .

X

/ Q

Opcional

Especifica que la instalación ejecutar en un modo silencioso sin interfaz de usuario. Utilice este parámetro para instalaciones desatendidas.

X

/ SQMREPORTING

Opcional

Especifica el uso de la característica informes de SQL Server. Para obtener más información, consulte declaración de privacidad para el servicio de informes de errores de Microsoft . Los valores admitidos son:

  • 1 = habilitado
  • 0 = desactivado

/ HIDECONSOLE

Opcional

Especifica que se oculta o se cierra la ventana de la consola. Si no se especifica un valor, la consola permanece abierta mientras se ejecuta el proceso de instalación, que generalmente no es la opción preferida.

X

/ BROWSERSVCSTARTUPTYPE

Opcional

Especifica la Inicio modo de servicio SQL Server Browser. Los valores admitidos son:

  • Automático
  • Discapacitados
  • Manual

/ FTUPGRADEOPTION

Opcional

Especifica la opción de actualización del catálogo de texto completo. Los valores admitidos son:

  • RECONSTRUIR
  • RESET
  • IMPORTACIÓN

Archivo de configuración (ConfigurationFile.ini)

Mientras que la especificación de parámetros en el símbolo permite controlar la instalación y configuración, utilizando un archivo de configuración le permite realizar lo mismo pero almacena todos los parámetros en un archivo. Al proporcionar varios archivos de configuración con la aplicación, puede enfrentar necesidades de configuración de SQL Server 2008R2 Express para una variedad de escenarios de implementación.

El siguiente es un ejemplo de archivo de configuración para una instalación básica de Express:

;SQLSERVER2008 Configuration File [SQLSERVER2008]
; Setup will not display any user interface.
QUIET="True"
 
; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.
ACTION="Install"
 
; Specifies that the console window is hidden or closed.
HIDECONSOLE="True"
 
; Specifies features to install, uninstall, or upgrade. The list of top-level
features include SQL, AS, RS, IS, and Tools. The SQL feature will install the
Database Engine, replication, and full-text. The Tools feature will install
Management Tools, SQL Server Books Online, Business Intelligence Development Studio, and other
shared components.
FEATURES=SQL, TOOLS
 
; Specify a default or named instance. MSSQLSERVER is the default instance for non-
Express editions, and SQLExpress is the default instance for Express editions. This parameter is required when
installing the SQL Server Database Engine (SQL), Analysis Services (AS), or Reporting
Services (RS).
INSTANCENAME="SQLEXPRESS"
 
; Windows account(s) to provision as SQL Server system administrators.
SQLSYSADMINACCOUNTS="Builtin\Administrators"
 
; Account for SQL Server service: Domain\User or system account.
/SQLSVCACCOUNT="<DomainName\UserName>"
 
; Specifies the password for SQLSVCACCOUNT
/SQLSVCPASSWORD="<StrongPassword>

Otro ejemplo de un archivo de configuración puede encontrarse en cualquier equipo con SQL Server 2008 Express instalado en la ubicación predeterminada de c:\Archivos de programa\Microsoft SQL Server\100\Setup Bootstrap\Log\ < timestamp carpeta > \ConfigurationFile.ini.

Para obtener más información acerca de cómo utilizar el archivo de configuración, consulte Cómo: instalar SQL Server 2008 usando un archivo de configuración (http://msdn.microsoft.com/en-us/library/dd239405.aspx ).

Control de errores de instalación

Para asegurar una instalación exitosa y fácil de usar, la aplicación de instalación debe atrapar y procesar los códigos de salida SQL Server 2008 Express. Estos códigos permiten tomar acciones correctivas para la gestión de una instalación nueva o una actualización de SQL Server 2008 Express.

En los ejemplos anteriores, System.Diagnostics.Process.Start se ha utilizado para invocar el proceso de instalación de SQL Server 2008 Express. El espacio de nombres System.Diagnostics.Process también puede utilizarse para controlar el código de salida del proceso al invocar setup.exe para determinar si la instalación fue exitosa o no.

Ejemplos:

C#

System.Diagnostics.Process processObj = System.Diagnostics.Process.Start(@"c:\temp\sqlsetup\setup.exe",
            @"/q /Action=Install /Hideconsole /IAcceptSQLServerLicenseTerms=True /Features=SQL,Tools /InstanceName=SQLExpress /SQLSYSADMINACCOUNTS=""Builtin\Administrators"" /SQLSVCACCOUNT=""DomainName\UserName"" /SQLSVCPASSWORD=""StrongPassword""");
            //Loop until the process has exited
            do
            {
                 //refresh the process
                 processObj.Refresh();
            } while (!processObj.WaitForExit(1000));
            Console.WriteLine("Process exited with {0}!", processObj.ExitCode);

VB.NET

Dim processObj As Process = Process.Start("c:\temp\sqlsetup\setup.exe", "/q /Action=Install /Hideconsole /Features=SQL,Tools /InstanceName=SQLExpress /SQLSYSADMINACCOUNTS=""Builtin\Administrators"" /SQLSVCACCOUNT=""DomainName\UserName"" /SQLSVCPASSWORD=""StrongPassword""")
            'Loop until process exits
            Do While Not processObj.WaitForExit(1000)
                'refresh process informaton
                processObj.Refresh()
            Loop
            Console.WriteLine("Process exited with {0}!", processObj.ExitCode)

C++

#include "stdafx.h"
 
            #include <Windows.h>
 
            #include <stdio.h>
 
            #include <tchar.h>
 
             
            int _tmain(int argc, _TCHAR* argv[])
 
            {
 
                STARTUPINFO si;
 
                PROCESS_INFORMATION pi;
 
             
                ZeroMemory( &si, sizeof(si) );
 
                si.cb = sizeof(si);
 
                ZeroMemory( &pi, sizeof(pi) );
 
                 
 
                // Create the setup.exe process
 
                if(!CreateProcess(L"c:\\temp\\sqlsetup\\setup.exe",
 
                    L" /q /Action=Install /Hideconsole /IAcceptSQLServerLicenseTerms=True /Features=SQL,Tools /InstanceName=SQLExpress /SQLSYSADMINACCOUNTS=\"Builtin\\Administrators\" /SQLSVCACCOUNT=\"DomainName\\UserName\" /SQLSVCPASSWORD=\"StrongPassword\"",
 
                    NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
 
                {
 
                printf( "CreateProcess failed (%d)\n", GetLastError() );
 
                return 1;
 
                }
 
             
                // Wait until setup exit.
 
                WaitForSingleObject( pi.hProcess, INFINITE );
 
                DWORD exitCode=0;
 
                // Get the exit code
 
                GetExitCodeProcess(pi.hProcess,&exitCode);
 
                printf("Exit code (%d)\n", exitCode);
 
                // Close process and thread handles.
 
                CloseHandle( pi.hProcess );
 
                CloseHandle( pi.hThread );
 
             
                return 0;
 
            }

           

Al evaluar el código de salida, el cero es un éxito y distinto de cero indica que un requisito previo es que faltan o que se ha producido un error durante la instalación. La tabla siguiente contiene una lista de los códigos de salida más comunes y representan que la mínima básica comprueba que ocurren para una instalación de SQL Server 2008 Express.

Código de salida Significado
0 Instalación exitosa
0xBC2 Instalación satisfactoria; Sin embargo, se requiere un reinicio de sistema.
0x8XXX0BC2
(si el código de salida termina con BC2)
Se requiere un reinicio de sistema antes de continuar con la instalación.
0x84C408 .Net es necesario
0x84C40010 Se requiere Microsoft Windows Installer 4.5.

Fallas de regla

Durante la instalación, el verificador de la configuración de sistema procesa varias reglas para asegurar que los necesarios servicios, claves de registro, versión del sistema operativo, etc. necesarios para SQL Server 2008R2 están presentes. Si falla una regla, se devuelve un código de falla asociado como el código de salida.

La siguiente tabla enumera los fracasos de la regla que puede comprobar durante la instalación. Para obtener más información sobre las reglas utilizadas por el comprobador de configuración del sistema, así como recomienda las acciones del usuario para corregir un error de regla, consulte Compruebe los parámetros para el comprobador de configuración del sistema .

Regla Descripción Código de error

OsVersionCheck

Comprueba si el equipo cumple los requisitos de versión de sistema operativo mínimo.

0x84BE0001

ThreadHasAdminPrivilegeCheck

Comprueba si la cuenta que ejecuta el programa de instalación de SQL Server tiene derechos de administrador en el equipo.

0x84BE0007

RebootRequiredCheck

Comprueba si un equipo pendiente es necesario; un reinicio pendiente puede causar un error de configuración.

0x84BE0BC2

WmiServiceStateCheck

Comprueba si el servicio WMI ha comenzado y se está ejecutando en el equipo.

0x84BE0003

AclPermissionsFacet

Verifica si las claves de registro de SQL Server son compatibles.

0x84BE01FF

MediaPathLength

Comprueba si el medio de instalación de SQL Server no es demasiado largo.

0x84BE0009

FusionRebootCheck

Comprueba si es necesario reiniciar equipo debido a la fusión roto ATL; un reinicio pendiente puede causar un error de configuración.

0x84BE0BC2

SqlUnsupportedProductBlocker

Comprueba si está instalado SQL Server 7.0 o SQL Server 7.0 OLAP Services; SQL Server 2008 no es compatible con SQL Server 7.0.

0x84BE020D

PerfMonCounterNotCorruptedCheck

Comprueba si el subárbol de registro de contador de rendimiento existente es coherente.

0x84BE0004

Bids2005InstalledCheck

Comprueba si hay versiones anteriores de SQL Server 2008 Business Intelligence Development Studio.

0x84BE0005

BlockInstallSxS

Comprueba si existe una instalación existente de SQL Server 2008 Community Technology Preview (CTP).

0x84BE01FA

FacetDomainControllerCheck

Comprueba si el equipo es un controlador de dominio; no se recomienda instalar SQL Server 2008 en un controlador de dominio.

0x84BE0201

SSMS_IsInternetConnected

Verifica que el equipo está conectado a Internet. Si una aplicación .net de Microsoft como Microsoft Management Studio comienza, puede producirse un retraso mientras la comprobación de seguridad .net valida un certificado.

0x84BE0BD1

FacetWOW64PlatformCheck

Determina si el programa de instalación de SQL Server es compatible con esta plataforma de sistema operativo.

0x84BE0213

FacetPowerShellCheck

Comprueba si está instalado Windows PowerShell ®; Windows PowerShell es un requisito de Microsoft SQL Server 2008 Express with Advanced Services.

0x84BE0214

IsFirewallEnabled

Comprueba si el Firewall de Windows está habilitado.

0x84BE0BD2

BlockMixedArchitectureInstall

Comprueba si las características de la instalación son la misma arquitectura de CPU como la instancia especificada.

0x84BE0202

BlockCrossLanguageInstall

Comprueba si el idioma de instalación es el mismo que el lenguaje de las características existentes de SQL Server.

0x84BE0205

StandaloneInstall_HasClusteredOr
PreparedInstanceCheck

Comprueba si el nombre de la instancia seleccionada ya es utilizado por una instancia existente de preparados de clúster o agrupada en cualquier nodo del clúster.

0x84BE0207

RS_DoesCatalogExist

Comprueba si existe el archivo de base de datos de catálogo de Reporting Services.

0x84BE03F4

RS_DoesCatalogTempDBExist

Comprueba si existe el archivo de base de datos temporal de Reporting Services catálogo.

0x84BE03F5

Sql2005SsmsExpressFacet

Comprueba si están instaladas las herramientas de SQL Server 2005 Express.

0x84BE0218

EditionRequirementCheck

Comprueba si la edición de SQL Server es compatible con el sistema operativo existente

0x84BE0219

FAT32FileSystemCheck

Comprueba si la unidad especificada es un volumen de sistema de archivos FAT32; instalación en un sistema de archivos FAT32 es compatible pero no se recomienda porque es menos seguro que el sistema de archivos NTFS

0x84BE0249

LibertyASInstallRule

Comprueba si está instalado SQL Server 2000 Analysis Services; SQL Server 2000 Analysis Services no puede instalarse si se utiliza el nombre de la instancia predeterminada de SQL Server 2008.

0x84BE024A

InstanceClashRule

Comprueba si el nombre de instancia especificado ya es utilizado por una instancia existente de SQL Server.

0x84BE024B

VSShellInstalledRule

Comprueba si hay versiones anteriores de Visual Studio 2008.

0x84BE024C

BlockMixedArchitectureUpgrade

Comprueba si la arquitectura de CPU upgrades de función es diferente de la arquitectura de CPU del programa instalado.

0x84BE0203

ShilohUpgradeRule

Comprueba si la instancia seleccionada de SQL Server 2000 cumple los requisitos mínimos de actualización.

0x84BE01F4

LibertyASUpgradeRule

Comprueba si debe actualizar Analysis Services de SQL Server 2000 antes de actualizar servicios de base de datos de SQL Server. SQL Server 2000 Analysis Services debe actualizarse antes de cualquier servicio de base de datos de instancia con nombre.

0x84BE0258

YukonUpgradeSidRule

Comprueba si valen los SID que están asociados con las características seleccionadas para una actualización.

0x84BE0217

BlockCrossLanguageUpgrade

Comprueba si el idioma de instalación es el mismo que el lenguaje de las mejoras de la función de SQL Server.

0x84BE0200

KatmaiBuildToBuildUpgradeRule

Comprueba si la instancia seleccionada de SQL Server 2008 cumple con el requisito mínimo para una actualización de generación a generación.

0x84BE01F8

RS_ValidDSN

Comprueba si el servidor de informes tiene un DSN válido.

0x84BE03E9

RS_ValidDatabaseVersion

Comprueba si la versión de base de datos del servidor de informes puede utilizarse por el servidor de informes de SQL Server 2008.

0x84BE03EA

RS_NoCustomRenderingExtensions

Comprueba si el servidor de informes tiene las extensiones de representación personalizada configuradas.

0x84BE03EB

RS_NoCustomSecurityExtensions

Comprueba si el servidor de informes tiene las extensiones de seguridad personalizados configuradas.

0x84BE03EC

RS_NoCustomAuthExtensions

Comprueba si el servidor de informes tiene las extensiones de autenticación personalizado configuradas.

0x84BE03ED

RS_ReportServerUnsupportedSecurityMode

Comprueba si el servidor de informes está usando cualquier modos de seguridad de Microsoft Internet Information Services (IIS) no compatible.

0x84BE03EE

RS_ReportManagerUnsupported
SecurityMode

Comprueba si Report Manager utiliza cualquier modos de seguridad IIS no compatibles.

0x84BE03EF

RS_ReportServerClientCertificate
Obligatorio

Comprueba si el servidor de informes es necesario utilizar certificados de cliente.

0x84BE03F0

RS_ReportManagerClientCertificate
Obligatorio

Comprueba si el servidor de informes es necesario utilizar certificados de cliente.

0x84BE03F1

RS_RS2000SP2Required

Comprueba si está instalado SQL Server 2000 Reporting Services Service Pack 2 (SP2).

0x84BE03F2

RS_RSServiceRunning

Comprueba si el servicio de Reporting Services se ejecuta cuando la instancia de clúster se está actualizando.

0x84BE03F3

Engine_SqlServerServiceDisabled_Id

Comprueba si el servicio de SQL Server no está establecido como deshabilitado.

0x84BE07D1

Engine_SqlEngineHealthCheck

Comprueba si se puede reiniciar el servicio de SQL Server; o para una instancia de clúster, si el recurso de SQL Server está conectado.

0x84BE07D5

Engine_AllSystemDatabases
AccessibleCheck

Comprueba si todas las bases de datos del sistema son accesibles.

0x84BE07D4

Engine_UserHasNotDefinedSchema
SysCheck

Comprueba si el usuario ha definido un esquema llamado 'sys'.

0x84BE07D6

Engine_FilestreamAndRcsiDatabasesCheck

Controles para bases de datos con grupos de archivos FILESTREAM y READ_COMMITTED_SNAP
SHOT o ALLOW_SNAPSHOT_
AISLAMIENTO habilitado.

0x84BE07DC

Engine_ResourceDLLUpdateRestart
Verificación

Comprueba si hay actualizaciones de DLL de recurso compartido, que causan reinicios para instancias de SQL Server en cluster activos en este nodo.

0x84BE07E1

ShilohServiceAccountUpgradeRule

Comprueba si las cuentas de servicio de SQL Server 2000 cumplen los requisitos de actualización.

0x84BE0204

Engine_ServiceAccountOnDomain
Verificación

Comprueba si la cuenta de servicio de SQL Server cuando se ejecuta en un controlador de dominio es apta para la actualización.

0x84BE07D3

Cluster_MultipleGroupsUpgradeRule

Comprueba si la instancia seleccionada en clúster de SQL Server 2005 se instala en varios grupos.

0x84BE0BC9

Cluster_BlockLibertyUpgrade

Comprueba si la instancia seleccionada para el upgrade es una instancia agrupada de SQL Server 2000 64-bit.

0x84BE0BCB

FeatureUpgradeMatrixCheck

Comprueba si la característica especificada cumple con SQL Server 2008 upgrade requisitos.

0x84BE0212

IncompleteUpgradeCheck

Comprueba si la operación de actualización se completó correctamente.

0x84BE020E

FailedUpgradeCheck

Comprueba si ha fallado una actualización anterior.

0x84BE020F

LocalOnly_SqlFeatureStateCheck

Comprueba si se ha configurado correctamente la actualización de la función de servicios de base de datos de SQL Server.

0x84BE0215

LocalOnly_AsFeatureStateCheck

Comprueba si se ha configurado correctamente la actualización de la función de SQL Server Analysis Services.

0x84BE0216

RsFeatureStateCheck

Comprueba si se ha configurado correctamente la actualización de la función de SQL Server Reporting Services.

0x84BE0217

Errores que se producen durante la instalación pueden producir detalles adicionales en los archivos de registro de instalación. Esta información puede utilizarse para descubrir información acerca de un error de regla o error no controlado que no está asociado con una regla. Para obtener más información, consulte Cómo: ver y leer SQL Server Setup Log Files .

Volver al comienzo

Implementar SQL Server Express como requisito previo con ClickOnce

Mientras desarrolla su aplicación mediante Microsoft Visual Studio, puede agregar un proyecto de instalación a su solución luego especificar SQL Server Express como requisito previo para su aplicación. Entonces el paquete de instalación instalará SQL Server Express en el equipo de destino si es necesario. Para obtener un ejemplo paso a paso puede hacer referencia a cómo implementar SQL Server 2008 Express como requisito previo con ClickOnce .

Cómo crear, implementar o actualizar su base de datos

Después de instalar SQL Server 2008R2 Express, debe asegurarse de que la base de datos utilizada por la aplicación está disponible. Históricamente esto se ha logrado por proporciona secuencias de comandos T-SQL para crear la base de datos, o para actualizar una versión anterior de la base de datos. Si bien este enfoque sigue siendo válido, SQL Server 2008R2 introducido paquetes de aplicación de capa de datos (DAC) que le permite tratar su base de datos (y los objetos asociados) como si fuera una aplicación completa con control de versiones y capacidades de actualización.

Bases de datos de secuencias de comandos

Para obtener más información sobre la creación de secuencias de comandos T-SQL para crear o actualizar una base de datos, consulte documentación y bases de datos de secuencias de comandos y Cómo: generar un Script (SQL Server Management Studio) .

Aplicaciones de nivel de datos

Una aplicación de capa de datos (DAC) es una entidad que contiene todos los objetos de base de datos utilizados por su aplicación. Proporciona una sola unidad para la creación, implementación, y administración de estos objetos y permite una integración más estrecha de la capa de datos y desarrollo de aplicaciones.

Un DAC es típicamente creado con Visual Studio 2010 utilizando la plantilla de aplicación de capa de datos, a continuación, construido y desplegado en la base de datos. Sin embargo también puede exportar un paquete de CAD desde una base de datos existente.

Para obtener más información sobre cómo crear y utilizar aplicaciones de nivel de datos, vea:

Volver al comienzo


Referencias


Véase también


Otros idiomas

Este artículo también está disponible en los siguientes idiomas:

Inglés (en-US)