Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/04/2011, 09:10
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 9 meses
Puntos: 774
Actualizar Todas las columnas de un tipo en una base de datos

Hola compañeros aqui les traigo un pequeño aporte, esperando que a alguien le pueda servir, es un query que actualiza todas las columnas de un tipo(en este ejemplo datetime) de una tabla, quizas a alguien le sirva de ayuda o de guia para hacer algo parecido :)

Código SQL:
Ver original
  1. --Primero insertamos los nombres de las tablas que queremos actualizar
  2. SELECT
  3. TABLE_NAME, IDENTITY(INT, 1,1) AS ROW INTO #temp
  4. FROM information_schema.TABLES WHERE table_schema LIKE '%dbo%' AND table_type LIKE '%base%'
  5.  
  6. DECLARE @x INT
  7. DECLARE @total INT
  8. DECLARE @query VARCHAR(MAX)
  9. DECLARE @TABLE_NAME VARCHAR(200)
  10. DECLARE @column_name VARCHAR(200)
  11. DECLARE @datos INT
  12. DECLARE @y INT
  13. DECLARE @total2 INT
  14.  
  15. SELECT @total=COUNT(*) FROM #temp
  16. SET @x=1
  17. while @x<=@total
  18. BEGIN
  19.   --obtenemos el nombre de la tabla
  20.   SELECT @TABLE_NAME=TABLE_NAME FROM #temp WHERE ROW=@x
  21.   --y buscamos en cada columna de esa tabla el tipo de dato que nos interesa
  22.   SET @query='select column_name, table_name,identity(int, 1,1) as row into ##temp2 from information_schema.columns where table_name like '  + CHAR(39) + '%' +@TABLE_NAME + '%' + CHAR(39) +' and data_type like ' + CHAR(39) + '%date%' + CHAR(39)
  23.   EXEC Sp_sqlExec @query
  24.   SELECT @datos=COUNT(*) FROM ##temp2
  25.   IF @datos>=1
  26.   BEGIN
  27.     SELECT @total2=COUNT(*) FROM ##temp2
  28.     SET @y=1
  29.     while @y<=@total2
  30.       BEGIN
  31.                
  32.         SELECT @column_name=column_name FROM ##temp2 WHERE ROW=@y
  33.          --ya con el nombre hacemos el update a la tabla en este caso por una fecha en formato UTC
  34.         SET @query='update ' + @TABLE_NAME + ' set '+ @column_name + '=getutcdate()'
  35.         EXEC Sp_sqlExec @query
  36.         print @column_name    
  37.         SET @y=@y+1
  38.       END
  39.     SELECT @TABLE_NAME=TABLE_NAME FROM ##temp2
  40.     print @TABLE_NAME
  41.  
  42.   END
  43.   DROP TABLE ##temp2
  44.   SET @x=@x+1
  45. END

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me