Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Procedimientos almacenados de estructuras de tablas

Estas en el tema de Procedimientos almacenados de estructuras de tablas en el foro de SQL Server en Foros del Web. Buenos días!! Tengo que hacer dos procedimientos con SQL para un trabajo universitario: Uno para consultar la estructura de tablas y otro de actualización de ...
  #1 (permalink)  
Antiguo 03/07/2013, 08:35
 
Fecha de Ingreso: julio-2013
Mensajes: 6
Antigüedad: 10 años, 11 meses
Puntos: 0
Procedimientos almacenados de estructuras de tablas

Buenos días!!

Tengo que hacer dos procedimientos con SQL para un trabajo universitario: Uno para consultar la estructura de tablas y otro de actualización de información de auditoria, y no se me ocurre como encararlos.

El tema es que el primero tiene que reflejar la estructura inicial de la tabla que estoy consultando,o sea, tendría que pasarle el nombre de la tabla y que me devuelva su estructura...como seria su desarrollo?

Y el otro una vez que yo haya efectuado algún cambio en la tabla,o sea, si hice un insert o un update. El procedimiento tendría que mostrarme el estado actual de la tabla, o sea, como quedo después de esas operaciones...se entiende?

En pocas palabras, seria un procedimiento para el estado inicial de la tabla y otro para el estado posterior.
Bueno, me seria de mucha ayuda que me puedan dar una mano, porque no se como hacerlos

Muchas Gracias!!
  #2 (permalink)  
Antiguo 03/07/2013, 08:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 10 meses
Puntos: 774
Respuesta: Procedimientos almacenados de estructuras de tablas

estructura de la tabla, revisa las vistas del sistema, sysviews, status de la tabla, podrias hacerlo con un trigger, para revisar si se actualizo o se inserto informacion y los cambios almacenarlos en una tabla de auditoria :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/07/2013, 04:53
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 11 meses
Puntos: 40
Respuesta: Procedimientos almacenados de estructuras de tablas

Para obtener los nombres de las columns puedes utilizar la siguiente consulta:
Código SQL:
Ver original
  1. SELECT  name
  2. FROM    sys.COLUMNS
  3. WHERE   Object_Name(object_id)='MiTabla';
Para información adicional - necesitas otras tablas de sistema que complquen la consulta, pero como Libras ya ha mencinado - toda la información esta disponible.

Para obtener el estado actual de los datos, tienes que utilizar un Select simple:
Código SQL:
Ver original
  1. SELECT *
  2. FROM   MiTabla;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 06/07/2013, 08:15
 
Fecha de Ingreso: julio-2013
Mensajes: 6
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Procedimientos almacenados de estructuras de tablas

Muchas gracias por la ayuda!!!
Cuando ejecuto el procedimiento y le paso por parámetros el nombre de una tabla me tiene que traer su estructura inicial, o sea, los campos:
[NOMBRETABLA]
[OBJECTID]
[NOMBRECOL]
[FECMOD]
[TIPODATO]
[TAMAÑO]
[VALORPRECISION]
[ESCALA]
[NULO]
[IDSEED]
[TIPOIDENTITY]
[VALORDEFAULT]
estos datos se tienen que almacenar en una tabla de auditoria.
Mi duda es ¿como hago para cargar los datos esos en la tabla de auditoria y que cada vez que le paso una tabla distinta por parámetro se actualice y me muestre correctamente esos datos?
Muchas Gracias nuevamente!!!
  #5 (permalink)  
Antiguo 06/07/2013, 08:40
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 11 meses
Puntos: 40
Respuesta: Procedimientos almacenados de estructuras de tablas

Más o menos así:

Código SQL:
Ver original
  1. CREATE PROCEDURE MiProcedimiento @MiTabla SysName AS
  2.  
  3. DELETE
  4. FROM  TablaAuditoria
  5. WHERE Tabla=@MiTabla;
  6.  
  7. INSERT
  8. INTO TablaAuditoria(Tabla,Columna)
  9. SELECT  @MiTabla,
  10.               name
  11. FROM    sys.COLUMNS
  12. WHERE   Object_Name(object_id)=@MiTabla;
  13. GO

Por supuesto qye esta tabla es redundante porque toda la información está disponible en la tabla sys.columns.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #6 (permalink)  
Antiguo 06/07/2013, 09:25
 
Fecha de Ingreso: julio-2013
Mensajes: 6
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Procedimientos almacenados de estructuras de tablas

Muchas gracias!!!
ya casi lo puede solucionar.
Otra duda, de donde puedo sacar la fecha de modificación de las columnas de una tabla?
Porque estuve inspeccionando las tablas del sistema y demás, pero no encuentro ese dato.
Gracias!
  #7 (permalink)  
Antiguo 06/07/2013, 09:49
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 11 meses
Puntos: 40
Respuesta: Procedimientos almacenados de estructuras de tablas

La columna Modify_Date de la tabla de sistema sys.tables obtiene la fecha de la ultima modificación del esquema de la tabla.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #8 (permalink)  
Antiguo 06/07/2013, 10:31
 
Fecha de Ingreso: julio-2013
Mensajes: 6
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Procedimientos almacenados de estructuras de tablas

con eso me dice la fecha de modificacion y como tengo que hacer para que me liste todos los campos de una tabla con la fecha de cuando fueron agregados...
Como veras mi conocimientos en sql son muy basico, por eso toda ayuda es bienvenida!!
  #9 (permalink)  
Antiguo 06/07/2013, 11:49
 
Fecha de Ingreso: julio-2013
Mensajes: 6
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Procedimientos almacenados de estructuras de tablas

Ya solucione esa parte con un INNER JOIN.
Otra consulta: una vez que tengo una seleccion de campos, o sea:
Código SQL:
Ver original
  1. @esquema VARCHAR(128),
  2. @nombretabla VARCHAR(128)
  3.  
  4. SELECT ST.object_id AS id_tabla,
  5.            ISC.TABLE_NAME AS NOMBRE_TABLA,
  6.            ST.create_date AS FECHA_CREATE,
  7.            ST.modify_date AS FECHA_ALTER,
  8.            ISC.DATA_TYPE AS TIPO_DATO,
  9.            TAMAÑO=CASE WHEN  ISC.CHARACTER_MAXIMUM_LENGTH <> -1 THEN CAST ((ISC.CHARACTER_MAXIMUM_LENGTH/2) AS VARCHAR(10))
  10.                        ELSE REPLACE (ISC.CHARACTER_MAXIMUM_LENGTH,-1, 'MAX')
  11.                        END,  
  12.            ISC.NUMERIC_PRECISION AS VALOR_PRECISION,
  13.            ISC.NUMERIC_SCALE AS ESCALA,
  14.            ISC.IS_NULLABLE AS NULO,
  15.            ISC.COLUMN_NAME AS NOMBRE_COLUMNA ,
  16.            ST.type_desc AS TIPO_USUARIO,
  17.            ISC.COLUMN_DEFAULT AS VALOR_DEFAULT    
  18.            FROM INFORMATION_SCHEMA.COLUMNS AS ISC
  19.            INNER JOIN sys.TABLES AS ST ON ISC.TABLE_NAME=ST.name
  20.             WHERE ISC.TABLE_SCHEMA = @esquema AND ISC.TABLE_NAME=@nombretabla
y quiero guardar los datos que me devuelve esta selección en una tabla de auditoria como tengo que hacer? Un INSERT INTO? pero como introduzco los datos?
Muchas gracias!
  #10 (permalink)  
Antiguo 06/07/2013, 12:53
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 11 meses
Puntos: 40
Respuesta: Procedimientos almacenados de estructuras de tablas

1. Insert Into como en mi segunda respuesta.
2. El sistema no almacena detalles sobre los cambios en los esquemas de las tablas aparte de la fecha Modify_Date.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: estructuras, insert, procedimientos, sql, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:38.