27 de marzo de 2003

Buscar parte de un código dentro de un procedimiento almacenado en SQL SERVER

Si necesitan buscar parte de un código dentro de un procedimiento almacenado en SQL SERVERS, aqui la solución.
select so.id, so.name 
   from sysobjects so 
   inner join syscomments sc 
   on so.id = sc.id AND sc.encrypted= 0 
   where so.xtype = 'P' and charindex ( 'PON AQUI EL CÓDIGO A BUSCAR', sc.text ) > 0
Enrique Albán

14 de marzo de 2003

SQL Select en VFP y T-SQL

Artículo original: SQL SELECT in VFP and T SQL
http://www.ml-consult.co.uk/foxst-38.htm
Autor: Mike Lewis
Traducido por: Ana María Bisbé York

Veamos estas diferencias en la sintaxis cuando se mueven datos entre Visual FoxPro y SQL Server.

A lo largo de estos últimos años, el Fox team en Microsoft ha hecho un trabajo excelente para acercar lo más posible el sublenguaje SQL de VFP para que acepten los estándares. En particular, se ha hecho el comando SELECT más cercano, conforme a los estándares ANSI-92, lo que es una buena noticia para los desarrolladores que necesitan moverse entre VFP y tener datos en Bases de datos SQL Server y Oracle.

Aun la versión actual de SELECT tiene suficientes diferencias que atrapan al programador desprevenido. Algunas de estas diferencias reflejan peculiaridades del lenguaje FoxPro, mientras otras son servicios tan genuinamente útiles - aunque no son estándar - que los desarrolladores no dejarían de emplearlo - por ejemplo, la capacidad para enviar los resultados de una consulta directamente a una matriz.

En este artículo, veremos las diferencias entre la sintaxis de las versiones de SELECT para VFP y SQL Server (T-SQL). Nosotros compilamos la lista específicamente teniendo en mente SQL Server 2000 , casi todos los puntos se refieren a las versiones 7 y 2005 (hemos actualizado el artículo después de que ha salido SQL Server 2005). Si conoce otras diferencias no cubiertas aquí, estaremos encantados de recibir su comentario.

Orden de las cláusulas

VFP siempre ha estado relajado en cuanto al orden de las cláusulas en una instrucción y esto se aplica al SELECT. Coloque su ORDER BY antes de la cláusula FROM, o su TOP N justo al final del comando y VFP ni siquiera va a pestañar. T-SQL es mucho más estricto. En general T-SQL exige que la cláusula aparezca en orden en el que se ha escrito en el diagrama de sintaxis del archivo de Ayuda.

Nombres de columnas vacíos

Algo raro de T-SQL que sorprende a los desarrolladores VFP, es la posibilidad de generar consultas de resultados con columnas de nombres vacías. Esto ocurre de forma predeterminada con columnas calculadas o agregadas. Por ejemplo, en los resultados de esta consulta:
SELECT EmployeeID, UPPER(LEFT(LastName,4))
FROM Employees
La segunda columna no tendrá nombre, en VFP, el nombre de la columna va a ser de forma predeterminada como Exp_1. En ambas versiones, puede emplear la cláusula AS para asignar un nombre a una columna:
SELECT EmployeeID,
UPPER(LEFT(LastName,4)) AS ShortName 
FROM Employees
pero T-SQL brinda una sintaxis alternativa que no está soportada por VFP.
SELECT EmployeeID, 
ShortName = UPPER(LEFT(LastName,4)) 
FROM Employees

WITH TIES

En T-SQL puede agregar WITH TIES es la cláusula TOP N para indicar que el conjunto resultante debe incluir y agrupar los valores en la fila enésima. Entonces, si especifica TOP 10 WITH TIES, y las filas 10ma y 11na tienen el mismo valor. Obtendrá 11 filas en el conjunto resultante. VFP no admite esta cláusula.

Cláusula FROM opcional

Aquí hay otra diferencia que sorprende a mucha gente. En T-SQL, es legal omitir la cláusula FROM en un comando SELECT - pero sólo si las expresiones, en la lista de expresiones, no referencian a ninguna columna en una tabla. Haciendo esto siempre genera un conjunto resultante con una fila exactamente. El comando siguiente, por tanto, va a producir un conjunto resultante que contiene solamente la fecha-hora actual:
SELECT GETDATE() AS Current
VFP va a oponerse resueltamente a un comando de este tipo.

Operador LIKE

Tanto VFP y T-SQL admiten caracteres comodín ('_' y '%') con el operador LIKE. Esto representa un único carácter y un número arbitrario de caracteres respectivamente. Por tanto, en esta consulta:
SELECT * FROM Products 
WHERE Product_Name LIKE '%chocolate%'
Tendremos todos los productos cuyo nombre incluya "chocolate"