</head>
SQL
Obteniendo un listado de tablas, columnas y tipo de datos de un PostgreSQL
Jan 19th
Hoy me encontraba trabajando para un proyecto propio, en el cual tengo que interactuar con un sistema legacy (+10 años) montado sobre un servidor de base de datos PostgreSQL.
Como se pueden imaginar, el esquema de la base de datos no es muy amigable, los nombres de las columnas poco descriptivos, y las foreing keys cuasi inexistentes.
Para sumarle complejidad el desarrollo lo estoy haciendo a distancia, por lo que la comunicación con el departamento de sistemas es escueta y por mail. Por lo que para simplificar la misma decidí hacer una especie de “diccionario de datos”, en el cual pienso documentar el esquema de la DB y el significado de cada tabla y campo.
Para hacer esto me topé con que en internet fue difícil encontrar un query SQL que me diera esta información, así que luego de una pequeña renegada pude solucionar, teniendo este SQL como output:
SELECT c.relname as "Table", a.attname as "Column", pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype" FROM pg_catalog.pg_attribute a INNER JOIN pg_catalog.pg_class c ON a.attrelid = c.oid LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE a.attnum > 0 AND NOT a.attisdropped AND n.nspname = 'public' ORDER BY c.relname ASC, a.attname ASC, pg_catalog.format_type(a.atttypid, a.atttypmod) ASC
Que nos dará como resultado algo como:
La consulta no esta optimizada, pero a mi me sirvió, quizás a alguno de ustedes le sirva como está o con algún que otro WHERE más.
Saludos,
Cambiar Itercalación (COLLATE) de tablas en masa
Jan 14th
Luego de un día entero de renagar con un problema de collation, ocurrido por usar SQL Compare de RedGate encuentro como solucionar el problema que ocurre al tratar de comparar dos columnas con diferentes collations.
Forzar uso de índices en SQL 2005 Express
Jan 15th
Hola a todos,
Luego de un tiempo sin escribir he decidido hacerlo de nuevo, para no olvidarme las cosas que voy aprendiendo en el día a día.
Hoy un amigo Sebastían Flores, me ayudó a probár que mi SQL Server 2005 Express realmente tenía un índice creado, pero que no lo usaba por considerarlo peor que un Index Scan.
En SQL Server 2000, si creaba el índice lo usaba aunque tuviese que hacer un Bookmark Lookup más costoso que un Index Scan.
La forma de forzar el uso de un índice en SQL es:
SELECT * FROM tblTaskProcesses (INDEX = IX_ProcessID) WHERE nextprocess = 1 AND processid IN (8,32,45)http://blogs.msdn.com/apinedo/pages/mejorar-el-rendimiento-de-queries-en-sql-server.aspx
Insertar valores en una Identity PK
Aug 26th
Ya que estamos con el tema de las identities PK, aprovecho para hacer este post de ayuda memoria.
Para insertar valores en columnas Identity hay que hacer:
SET IDENTITY_INSERT ON [myTable] ON
y luego de hacer los inserts correspondientes apagar esto con
SET IDENTITY_INSERT ON [myTable] OFF
And happy coding!
Saludos!
Reiniciar los valores de una Identity PK
Aug 26th
Hoy me ecuentro haciendo una migración de un sistema, para que cumpla con los estándares PCI DSS.
Al realizar una herramienta de migración, me contré con que necesitaba reiniciar la columna Identity de la tabla en SQL, tras varios intentos.
Luego de leer Can I start IDENTITY values at a new seed?, la forma de lograr esto es:
DBCC CHECKIDENT('myTable', RESEED, 0)
And happy migration!
Saludos!
SQL para obtener Schema de una base de datos en SQL Server
Apr 3rd
Hoy me encontré con el problema de obtener todas las tablas de una base de datos dado con SQL. Releyendo el post
SQL para obtener Schema de una tabla en SQL Server y hacindo un par de modificaciones obtuve la sentencia SQL para obtener todas las tablas de la DB.
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_TYPE = 'BASE TABLE'
AND TABLE_CATALOG='DATABASE_NAME'
donde dice DATABASE_NAME colocamos el nombre de la base de datos de la cual queremos saber su schema.
Enjoy!
Sentencia SQL para establecer DEFAULT en un campo en SQL Server
Dec 3rd
Buenas!
Luego de varios intentos sin éxito usando:
ALTER TABLE [dbo].[TABLA] ALTER COLUMN [COLUMN] SET DEFAULT ‘Default Value’
Como lo dice el artículo:
http://technet.microsoft.com/es-es/library/ms174123.aspx
Encontré la solución:
ALTER TABLE [dbo].[TABLA] ADD DEFAULT ‘Default Value’ FOR [COLUMN]
Aquí esta el thread con la solución:
http://www.houseoffusion.com/groups/sql/thread.cfm/threadid:800
SQL para obtener Schema de una tabla en SQL Server
Dec 3rd
El otro día necesitaba verificar el schema de una tabla en producción, ya que no andaba
, y no tenía acceso a través del Management Studio. Así que acudí a mi developer coach, Cesar Patroniti, quién rápidamente me paso la siguiente sentencia SQL:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ‘NombreTabla’
que funciona de maravillas. Y nos devuelve la siguiente info:
- TABLE_CATALOG
- TABLE_SCHEMA
- TABLE_NAME
- COLUMN_NAME
- ORDINAL_POSITION
- COLUMN_DEFAULT
- IS_NULLABLE
- DATA_TYPE
- CHARACTER_MAXIMUM_LENGTH
- CHARACTER_OCTECT_LENGTH
- NUMERIC_PRECISION
- NUMERIC_PRECISION_RADIX
- NUMERIC_SCALE
- DATETIME_PRECISION
- CHARACTER_SET_CATALOG
- CHARACTER_SET_SCHEMA
- CHARACTER_SET_NAME
- COLLATION_CATALOG
- COLLATION_SCHEMA
- COLLATION_NAME
- DOMAIN_CATALOG
- DOMAIN_SCHEMA
- DOMAIN_NAME
Gracias Cesar!
