none
Cursor que ejecute un procedimiento. RRS feed

  • Pregunta

  • Buen dia,

    Quisiera saber cual es la sintaxis correcta para poder ejecutar un procedimiento dentro de un cursor, estoy haciendo lo siguiente:

    declare cur_archivos cursor for
    exec master..xp_cmdshell 'DIR /b /S C:\inetpub\wwwroot\XML\'

    pero en el exec me aparece un error.

    No se si eso se pueda ya que lo normal seria 

    select campo from tabla

    Gracias.


    Cristian Carvajal Bahamon.

    lunes, 27 de agosto de 2012 19:45

Respuestas

Todas las respuestas

  • Hola.

    Efectivamente, deberás recuperar primero el resultado del procedimiento almacenado a una estructura temporal (crea una tabla temporal que tenga los mismos campos que el resultado del procedimiento y luego realizas un "insert..exec") y luego recorrer la tabla cargada con un cursor.

    Dicho esto, ¿qué es lo que te obliga a realizar todo esto? Como sabrás, no es algo muy recomendable emplear cursores, es preferible evitarlo siempre que sea posible. Si nos detallas lo que debes hacer, a lo mejor te podemos ayudar a esquivarlo.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 27 de agosto de 2012 20:01
    Moderador
  • Pues te comento, tengo que realizar un SP que lea unos archivos XML que tengo en una carpeta para luego insertarlo en la base de datos

    exec master..xp_cmdshell 'DIR /b /S C:\inetpub\wwwroot\XML\'
    con esto saco el listado de archivos que esta en la carpeta y queda almacenado en un dataresult, luego con el cursor quiero ir tomando los datos uno a uno y voy almacenado en mi BD lso archivos con esta sentencia
     INSERT sarc_archivo SELECT @nombre_arch, CONVERT(xml, BulkColumn, 2) FROM OPENROWSET(Bulk '@ruta_arch', SINGLE_BLOB) [rowsetresults];

    Desde un principio pensé pasar el resultado del procedimiento a una tabla, pero pensé que se podía hacer directamente y así ahorrarme ese paso.

    Cristian Carvajal Bahamon.

    lunes, 27 de agosto de 2012 20:22
  • Para evitarte el cursor como te recomienda qwalgrande, podrias considerar insertar directamente leyendo el archivo XML, la unica condicion es que tengas SQL 2005 en adelante, fijate en unos ejemplos

    http://www.ajaymatharu.com/insert-data-from-xml-in-sql/

    http://msdn.microsoft.com/es-es/library/ms175466.aspx

    martes, 28 de agosto de 2012 1:49