Está en la página 1de 126

Las siguientes notas se aplican nicamente a esta versin de SQL Server.

Microsoft Update Para obtener informacin acerca de cmo usar Microsoft Update para identificar actualizaciones de SQL Server 2008 R2, vea el sitio web de Microsoft Update en http://go.microsoft.com/fwlink/?LinkId=108409. Ejemplos De manera predeterminada, las bases de datos y el cdigo de ejemplo no se instalan como parte del programa de instalacin de SQL Server. Para instalar las bases de datos de ejemplo y el cdigo muestra para ediciones de SQL Server R2 diferentes de Express, vea el sitio web de CodePlex en http://go.microsoft.com/fwlink/?LinkId=87843. Para obtener informacin sobre la compatibilidad con las bases de datos de ejemplo de SQL Server y el cdigo muestra para SQL Server Express, vea la Informacin general y los ejemplos de bases de datos en el sitio web de CodePlex en http://go.microsoft.com/fwlink/?LinkId=110391. Notas de la versin Para obtener ms informacin acerca de los ltimos cambios en esta versin de SQL Server, vea el archivo Lame ms reciente en http://go.microsoft.com/fwlink/?LinkId=141691. Documentacin y vnculos Para instalar .NET Framework SDK, vea Instalar .NET Framework SDK en los Libros en pantalla de SQL Server 2008 R2 en http://go.microsoft.com/fwlink/?LinkId=141693. Para obtener informacin acerca de la configuracin del rea expuesta de SQL Server 2008 R2, vea los siguientes temas de la documentacin de SQL Server 2008 R2: En los Libros en pantalla de SQL Server 2008 R2: Descripcin de la configuracin del rea expuesta. En la ayuda del programa de instalacin de SQL Server 2008 R2: Minimizar el rea expuesta en SQL Server 2008 R2.

En los Libros en pantalla de SQL Server 2008 R2 en MSDN: Descripcin de la configuracin del rea expuesta en http://go.microsoft.com/fwlink/?LinkId=141692.

TIP Para conectar SQL Server 2008 (No R2) con Windows Azure.
24 10 2011

Saludos, esta maana me encontr con el siguiente problema, estaba tratando de conectar una base de datos SQL Server 2008 (No R2) con Windows Azure, pero me arrojaba el siguiente error: Bueno primero agrega los datos de tu SQL Azure al login del SQL Server 2008:

Al parecer esto se debe a que SQL Server 2008 tiene diferencias entre objetos de la versin SQL Server 2008 R2, pero. para poder conectarte puedes intentar lo siguiente y as ganar tiempo en lo que se migra a una versin R2 .

Paso 1. Cierra el cuadro de dialogo del error y cierra la ventana de login del SQL Server.

Paso 2. Haz clic en el botn de Nueva consulta ubicado en la barra de herramientas.

Paso 3. Veras nuevamente la pantalla de login del SQL Server 2008, ah debers dar clic en el botn Opciones >>, Selecciona la base de datos a la que te deseas conectar (examina el servidor), y da clic en el botn aceptar y posteriormente en el botn Conectar.

Paso 4. Si todo sali bien debers ya estar conectado a la instancia de tu SQL Azure, pero corroborarlo puedes hacer lo siguiente.

Saludos, espero les ayude un poco. Technorati Tags: Windows Azure,SQL Azure,Connect SQL Azure
Comentarios : 1

comentario

Categoras : SQL

No puedo ver la propiedades de mis Proyectos en Visual Studio 2008


29 06 2010

Saludos amigos, en esta ocasin me encontr con un problema en Visual Studio 2008, lo que suceda es que al abrir un proyecto de Windows Application y querer ver las propiedades del mismo, estas no apareca jams, ni aunque abriera un nuevo proyecto, ya investigando un poco y navegando por la red encontr la siguiente solucin, la cual en mi caso me funciono a la perfeccin: 1. Cierre Visual Studio 2008. 2. Abra la herramienta de smbolo de sistema de Visual Studio 2008, como administrador. 3. Escriba el siguiente comando "devenv /resetskippkgs, este comando es para Reinstalar o Restaurar los paquetes de Visual Studio, al ejecutar el comando se abrir un nuevo Visual Studio, en mi caso abr uno de mis proyectos y me permiti ver las propiedades. Si tienen ms problemas y con lo anterior no se soluciona, puede revisar este post: Ms soluciones Bueno amigos espero les sea de ayuda, que tengan un buen da. Etiquetas de Technorati: Visual Studio,Project Properties,devenv,resetskippkgs

Comentarios : 5 Comentarios Etiquetas: devenv, Project Properties, resetskippkgs, Visual Categoras : Visual Studio

Studio

[ASP.NET] Error del Servidor en Aplicacin: Error HTTP 404.3-Not Found.


3 10 2009

Saludos amigos en esta ocasin les dejo la solucin al siguiente error: Error del servidor en aplicacin Error HTTP 404.3 Not Found No puede obtener acceso a la pgina solicitada debido a la configuracin de la extensin. Si la pgina es un script, agregue un controlador. Si se debe cargar el archivo, agregue una asignacin MIME. Bueno pues la causa ms comn que provoca este error es que ha instalado primero alguna versin del Visual Studio 2005 o 2008, y posteriormente se habilito el servidor IIS (Internet Information Service). Para solucionarlo se deben de correr las siguientes lneas desde el CMD. Si tiene el sistema operativo Windows XP podr ejecutar la siguiente lnea de comando: C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -r

Si tiene el sistema operativo Windows Vista tendr que ejecutar la siguiente lnea de comando ya que la anterior no funciona en este S.O. C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -u

Posteriormente hay que correr esta otra lnea de comando:

C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -i

Error inesperado Mensaje de error: no se puede cargar el tipo Microsoft.VisualStudio.DataDesign.SyncDesigner.SyncFacade.SyncMan Ager del Ensamblado VisualStudio.DataDesign.SyncDesigner.DslPacka Ge, versin=9.0.0.0, Culture=neutral PublicKeyToken=b03f5f7f11d50a3a.

Bueno pues espero y le ayude a resolver el Error, espero sus comentarios. Etiquetas de Technorati: ASP .NET,Error HTTP 404.3,Error del servidor en aplicacin
Comentarios : 3 Comentarios Etiquetas: ASP NET, Error del Categoras : ASP NET

servidor en aplicacin, Error HTTP 404.3

[SQL2008] Cmo instalar MS SQL Server 2008?


3 10 2009

Saludos amigos en esta ocasin les dejo una serie de imgenes con algunas indicaciones para que puedan instalar Microsoft SQL Server 2008.

Para realizar la instalacin tiene que considerar los siguientes requerimientos antes de comenzar. (de esta manera podrn ahorrar tiempo). Si tienen instalado el Visual Studio 2008, verifiquen que: Tienen instalado el FrameWork 3.5 Service Pack 1. Si no lo tienen lo pueden descargar de: http://www.microsoft.com/downloads/details.aspx?FamilyID=d0e5dea7-ac26-4ad7-b68cfe5076bba986&displaylang=en Tienen instalado el Visual Studio 2008 Service Pack 1. Si no lo tienen lo pueden descargar de: http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd9984e525b5ce61&displaylang=en Tambin pueden descargar la versin gratuita de SQL Server 2008 de: http://www.microsoft.com/express/sql/download/

Listo, teniendo ya todos los requerimientos de la instalacin podemos comenzar con el MS SQL Server 2008: Screen1:

Screen2:

Screen3:

Screen4:

Screen5:

Screen6:

Screen7:

Screen8:

Screen9:

Screen10:

Screen11:

Screen12:

Screen13:

Screen14:

Screen15:

Screen16:

Screen17:

Screen18:

Screen19:

Screen20:

Screen21:

En este momento ya deben de tener instalado el MS SQL Server 2008, espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: MS SQL Server 2008,Instalacin de SQL Server 2008,SQL Server 2008 Installation.
Comentarios : 4 Comentarios Etiquetas: Instalacin de SQL Server

2008, MS SQL Server 2008, SQL Server 2008

Installation. Categoras : SQL

[SQL2008] Reduciendo el almacenamiento para columnas Nulas SPARSE Columns.


1 10 2009

Saludos amigos en esta ocasin les voy a escribir sobre una mejora implementada en SQL Server 2008, la cual nos ayudara mucho cuando deseemos almacenar valores nulos (NULL) o usados con poca frecuencia en nuestras bases de datos. SQL Server 2008 incorpora las Sparse columns ,sin duda es una mejora que permite la optimizacin del almacenamiento zerobyte de valores NULOS (NULL). Se permiten definir hasta 30,000 columnas dispersas (Sparse columns) en una tabla. Esta mejora es ideal para diseos de base de datos o aplicaciones que requieren un elevado nmero de columnas que pocas veces se usan, o para tablas con una serie de columnas que se relacionan con solo un subconjunto de datos almacenados. Para definir una columna dispersa Sparse column, slo tiene que aadir el atributo de almacenamiento SPARSE despus de la columna de definicin en un comando CREATE o ALTER TABLE, veamos el siguiente ejemplo:

CREATE TABLE dbo.Productos (ProductoID int NOT NULL PRIMARY KEY IDENTITY(1,1), Producto varchar(255) NOT NULL, Descripcion varchar(150) SPARSE NULL, CodigoAlterno varchar(30) SPARSE NULL, FechaAdd datetime NOT NULL)

Realicemos unas Inserciones a la tabla Productos, una de las inserciones contendr valores nulos:

INSERT INTO dbo.Productos (Producto,Descripcion,CodigoAlterno,FechaAdd) VALUES('WHISKY','Juanito el Caminador','WJC7854',GETDATE()), ('AGUA MINERAL',NULL,NULL,GETDATE())

Ahora seleccionemos los datos:


SELECT Producto,Descripcion,CodigoAlterno FROM dbo.Productos

WHERE (Descripcion IS NOT NULL) AND (CodigoAlterno IS NOT NULL)

Noten que lo que hicimos no nos afecta en nada aparentemente, la ventaja es que estamos haciendo ms eficiente la manera de almacenar las columnas que contengan valores nulos, en resumen estas columnas aplicaran el ZEROBYTE y ahorremos un poco ms de espacio en nuestras bases de datos.

Etiquetas de Technorati: SQL Server 2008,Sparse Columns,Columnas Dispersas,Valores Nulo,NULL values.


Comentarios : 1 comentario Etiquetas: Columnas Dispersas, NULL values., Sparse Columns, SQL Server

2008, Valores

Nulo
Categoras : SQL

[SQL-2008] Buscar texto en definiciones de Objetos MS SQL Server.


21 09 2009

Saludos amigos en esta ocasin les dejo un ejemplo de como poder buscar Cadenas de Texto en la definicin de nuestros Procedimientos almacenados. En este ejemplo vamos a buscar la palabra HumanResources en los procedimientos almacenados de la base de datos AdventureWorks2008. Necesitamos ejecutar el siguiente script con la cadena de texto que se va a buscar.
USE AdventureWorks2008; SELECT Name FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%HumanResources%' GO

Si se encontraron resultados, a continuacin se mostrara un listado con los nombres de los procedimientos almacenados que contienen nuestra palabra.

Bien amigos, para comprobar el resultado elegiremos uno de los procedimientos para ver su definicin e identificar que contiene la palabra que buscamos HumanResources.
USE AdventureWorks2008; EXEC sp_HelpText 'uspGetManagerEmployees'

Resultado:

Como pueden ver el resultado es sobre un Procedimiento almacenado de los de la lista que contienen la palabra a buscar, las palabras encerradas en color morado son las que coinciden con nuestra bsqueda, de esta manera podemos buscar lo que deseemos dentro de nuestros Stored Procedures y ver su definicin rpidamente. Bueno amigos, espero les sea de ayuda, espero sus comentarios y por favor voten por este blog. Etiquetas de Technorati: OBJECT_DEFINITION,Buscar texto en SQL,SQL 2008,Definicin de objetos.
Comentarios : 4 Comentarios Etiquetas: Buscar texto en SQL, Definicin Categoras : SQL

de objetos., OBJECT_DEFINITION, SQL 2008

[SQL 2008] Como instalar las bases de datos de ejemplo de MSSQL Server 2008.
19 09 2009

Saludos amigos, en el post anterior les indique de donde pueden descargar las bases de datos de ejemplo de MS SQL Server, ahora en este post les dejo unas imgenes para que vean los pasos que deben de seguir para instalar dichas bases de datos. Si no tienen el ejecutable para instalar las bases de datos de ejemplo pueden ver el siguiente post. BD Ejemplo MS SQL Server. Screen 1.

Screen 2.

Screen 3. Seleccionen las bases de datos que desean instalar adems de los Accesos rpidos y archivos de ejemplo.

Screen 4. Bases de datos disponibles para instalar.

Screen 4.1. Para este ejemplo solo instalaremos dos bases de datos.

Screen 5.

Screen 6.

Screen 7. La instalacin ha finalizado.

Screen 8. Listo ya tenemos instaladas las bases de datos de ejemplo que seleccionamos.

Espero les sea de ayuda, espero sus comentarios, por favor voten por mi blog. Etiquetas de Technorati: Bases de datos de ejemplo,Samples data bases. MS SQL Server 2008,Instalar ejemplos de Base datos,Install samples Data bases.
Comentarios : 1 comentario Etiquetas: Bases de datos de ejemplo, Instalar ejemplos bases., Samples data bases. MS SQL Server 2008 Categoras : SQL

de Base datos, Install samples Data

[SQL 2008] Bases de Datos de ejemplo de MSSQL Server.


19 09 2009

Saludos amigos aqu les dejo los vnculos para que puedan descargar las bases de datos de ejemplo de SQL Server AdventureWorks en una versin estable, ya que tambin existe una versin alpha. Vnculo: CODEPLEX Bases de Datos de ejemplo. Contenido de la descarga: SQL Server 2008 SR1. Etiquetas de Technorati: SQL Server,Bases de datos de ejemplo,example data bases. MS SQL Server 2008. SQL2008.AdventureWorks_All_Databases.x86.msi Other Available Downloads. SQL2008.AdventureWorks_All_Databases.x64.msi (Recommended default) SQL2008.AdventureWorks_All_Databases.ia64.msi (Recommended default) SQL2008.AdventureWorks_All_Databases.zip (Recommended default) SQL2008.AdventureWorksLT2008_Only_Database.zip (Recommended default)

Espero les sea de ayuda, dejen comentarios y por favor apyenme votando por mi Blog. Etiquetas de Technorati: SQL Server,Bases de datos de ejemplo,example data bases. MS SQL Server 2008.
Comentarios : 2 Comentarios Etiquetas: Bases de datos de ejemplo, example data

bases. MS SQL Server 2008., SQL

Server
Categoras : SQL

[SQL 2008] SP_HELPTEXT


31 08 2009

Saludos amigos aqu les dejo la manera fcil y sencilla de poder ver el contenido de los procedimientos almacenados, funciones, vistas, triggers, columnas calculadas y restricciones CHECK, en otras palabras es para ver la definicin de nuestros objetos de base de datos. Como ejemplo veremos la definicin de un procedimiento almacenado.

Resultado:

Obteniendo la definicin de una funcin:

Resultado:

De esta manera podemos explorar radamente las definiciones nuestros objetos, nuevamente espero les sea de ayuda, espero sus comentarios y por favor voten por mi blog. Etiquetas de Technorati: sp_helptext,SQL 2008
Comentarios : 3 Comentarios Etiquetas: sp_helptext, SQL 2008 Categoras : SQL

[SQL 2008] Accesos directos de consulta.


31 08 2009

Saludos amigos en esta ocasin les dejo un ejemplo de como configurar el SQL Server 2008 para utilizar Accesos directos con el teclado y as ejecutar sentencias SQL sin necesidad de escribirlas. Para esto pondr un ejemplo, por lo general al estar desarrollando en SQL Server utilizamos el SELECT * FROM o SELECT TOP 100 * FROM, bueno pues para no estar escribindolo a cada instante, configuraremos un Acceso directo,: 1. Vamos al men Herramientas >> Opciones.

2. Se desplegara un rbol de opciones, seleccionamos la de Entorno >> Teclado. 3. Se encontrara un apartado para crear Accesos directos de consulta, el cual se compone de dos partes: a. Accesos directos: Son la combinacin de teclas con las que ejecutaremos la consulta. b. Procedimientos almacenados: Son los SP que se ejecutaran, pueden ser tambin algunas sentencias SQL. Ejemplo: Insertaremos dos accesos directos de consulta, uno se ejecutara con a. Ctrl+5 = SELECT * FROM. b. Ctrl+6 = SELECT TOP 5 * FROM

Damos clic en el botn Aceptar y abrimos una nueva consulta.

Ahora vamos a seleccionar todos lo registros de la Tabla llamada DEMO_PRODUCTO, para esto escribiremos solo el nombre de la tabla y presionamos las teclas de acceso directo para seleccionar todos los registros (CTRL+5).

Resultado con CTRL+5:

Resultado con CTRL+6 :

Espero les sea de ayuda a la hora de trabajar con SQL Server, Dejen comentarios y voten por mi blog por favor. Etiquetas de Technorati: Accesos directos de consulta,SQL 2008
Comentarios : 1 comentario Etiquetas: Accesos directos Categoras : SQL

de consulta, SQL 2008

[SQL 2005] Lista delimitada por comas en SQL Server 2005 COALESCE.
28 07 2009

Saludos amigos en esta ocasin les dejo un ejemplo de como obtener una lista de valores delimitada por comas a partir de un comando SELECT en SQL Server 2005, ya que en un post anterior tengo el mtodo para SQL Server 2008 ( [SQL 2008] Crear una lista delimitada por comas usando SELECT. ). Bueno, para este ejemplo se utilizo la funcin COALESCE, la cual Devuelve la primera expresin distinta de NULL entre sus argumentos. Sintaxis. COALESCE ( expression [ ,...n ] ) Si desea saber ms sobre COALESCE vea: http://msdn.microsoft.com/esmx/library/ms190349(SQL.90).aspx

Ahora s, veamos el ejemplo: 1. Seleccionamos los roles de nuestra tabla.


SELECT id, name_english FROM dbo.ROLES_DEMO

2. Ahora regresamos una lista delimitada por comas usando el COALESCE.


USE demo GO DECLARE @valores varchar(500) SELECT @valores = COALESCE ( @valores + ',' , '' ) + name_english FROM dbo.ROLES_DEMO SELECT @valores AS Valores GO

Resultado:

Tambien pueden ver este post, donde encontraran ms informacin sobre COALESCE. @http://blog.sqlauthority.com/2008/06/04/sql-server-create-a-comma-delimited-list-usingselect-clause-from-table-column/ Espero les sea de ayuda y me despido de ustedes, recuerden votar por mi blog, por favor apyenme, ya que es muy raro que la gente vote. Etiquetas de Technorati: COALESCE,SQL 2005,Comma delimited List
Comentarios : 1 comentario Etiquetas: COALESCE, Comma delimited Categoras : SQL

List, SQL 2005

Curso de SQL Server 2008 y ASP Net 3.5


27 07 2009

Saludos amigos, les escribo solo para informarles que los Cursos impartidos en el Tecnolgico de Estudios Superiores de San Felipe del Progreso culminaron satisfactoriamente, a pesar de la influenza, todo sali de maravilla, los cursos impartidos fueron sobre SQL Server 2008 y Programacin ASP .Net 3.5 con Visual Studio 2008. Gracias a los Estudiantes y Profesores que pusieron empeo e inters durante las 4 sesiones del Curso, espero sin duda verlos en un futuro. Quedo a sus ordenes para dudas y sugerencias,. Su amigo Ivan Rangel Cuadros. E-mail: ivan.rangel.c@gmail.com Les dejo unas fotos tomadas en el Curso.

Comentarios :

Deja un Comentario
Categoras : SQL

[SQL2008] Creando Sinnimos para nuestros objetos de Base de Datos.


25 07 2009

Saludos amigos en esta ocasin les dejo un ejemplo del uso y creacin de sinnimos en SQL Server 2008.

Los sinnimos sirven para hacer referencia a nuestros objetos de base de datos de una manera ms entendible, clara, o simplemente para abreviar los nombres de tal manera que nos faciliten su uso en nuestras Consultas. Los sinnimos se pueden aplicar a los siguientes Objetos de BD:

Procedimiento almacenado del ensamblado (CLR). Funcin con valores de tabla del ensamblado (CLR). Funcin escalar del ensamblado (CLR). Funciones de agregado del ensamblado (CLR). Procedimiento de filtro de replicacin. Procedimiento almacenado extendido. Funcin escalar de SQL. Funcin SQL con valores de tabla. Funcin SQL con valores de tabla insertados. Procedimiento almacenado de SQL. Vista. Tabla1 (definida por el usuario) se incluyen tablas temporales locales y globales.

Debemos tomar en cuenta es que el Objeto el cual usaremos, NO es necesario que exista el momento de la CREACIN DEL SINNIMO, esto debido a que SQL Server comprueba la existencia del Objeto al momento de llamar o ejecutar el Sinnimo. Tambin SQL Server 2008, nos permite Crear, Quitar y hacer Referencia a sinnimos utilizando SQL dinmico, Eso es grandioso no creen?. Les dejo este ejemplo sencillo, en el cual crearemos un sinnimo para una Tabla (Objeto Base). 1. Creando el Sinnimo.
USE prueba; GO CREATE SYNONYM dbo.DemoResultados -- Nombre del Sinnimo. FOR dbo.DEMO_CicloEscolar_Examenes_Resultados; -- Objeto Base al cual le aplicaremos el Sinnimo. GO

2. Consultando datos del Sinnimo.


-- Consultando datos del Sinnimo. SELECT alumnoID, examenID, calificacion FROM dbo.DemoResultados; GO

3. Resultado.

Para eliminar el Sinnimo, lo pueden hacer de la siguiente manera:


USE prueba; GO DROP SYNONYM dbo.DemoResultados; GO

Para ms referencia les dejo este enlace: http://msdn.microsoft.com/eses/library/ms177544.aspx Espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL 2008,Create SYNONYM
Comentarios : Deja un Comentario Etiquetas: Create SYNONYM, SQL 2008 Categoras : SQL

Curso de SQL Server 2008 y ASP Net 3.5


21 07 2009

Saludos amigos, les escribo solo para informarles que los Cursos impartidos en el Tecnolgico de Estudios Superiores de San Felipe del Progreso culminaron satisfactoriamente, a pesar de la influenza, todo sali de maravilla, los cursos impartidos fueron sobre SQL Server 2008 y Programacin ASP .Net 3.5 con Visual Studio 2008. Gracias a los Estudiantes y Profesores que pusieron empeo e inters durante las 4 sesiones del Curso, espero sin duda verlos en un futuro. Quedo a sus ordenes para dudas y sugerencias. Su amigo Ivan Rangel Cuadros.

Blog: http://sqlpsykrest.wordpress.com/ E-mail: ivan.rangel.c@gmail.com Les dejo unas fotos del Curso.

Comentarios : 3

Comentarios
Categoras : SQL

[SQL 2008] Delete TOP con Chunking Data.

21 07 2009

Saludos amigos despus de la recuperacin satisfactoria del pequeo accidente que sufr, he vuelto a escribir un articulo sobre una nueva opcin de la clausula DELETE TOP disponible en SQL Server 2008. En SQL Server 2008 la clausula TOP se puede utilizar para Insertar, Eliminar, o Actualizar datos, en pocas palabras se puede utilizar con las sentencias INSERT, DELETE Y UPDATE. El ejemplo que les dejo muestra el uso de TOP para fragmentar CHUNKING informacin de una tabla, es decir, en lugar de ejecutar una sentencia DELETE para ejecutar una sola operacin, podemos fragmentar los datos en pequeas partes y hacer que sea ms ligera la operacin, y as mejorar el rendimiento y concurrencia de la base de datos para tablas grandes que tengan un acceso frecuente. Esta tcnica se utiliza para el manejo de grandes cargas de datos para informes o aplicaciones de tipo data warehouse. Los Grandes o Simples conjuntos de actualizaciones, pueden hacer que se incremente considerablemente el archivo de Transacciones Transaction log. Al procesar en partes la informacin, cada una de es confirmada despus de la terminacin de su ejecucin COMMIT, permitiendo que el servidor del SQL reutilice potencialmente ese espacio del registro de transacciones. Adems del incremento en el registro de transacciones, en una actualizacin muy grande de datos, si la consulta es cancelada, usted puede tener que esperar un gran lapso de tiempo mientras que la transaccin se deshace Rolls Back. Con partes ms pequeas, usted puede continuar con su actualizacin de manera ms rpida. Tambin, el Chunking permite ms concurrencia contra la tabla modificada, permitiendo que las consultas de usuario se ejecuten, en lugar de esperar varios minutos para que una modificacin grande termine. Para este ejemplo crearemos una tabla temporal en la cual insertaremos 5000 registros, posteriormente realizaremos un DELETE TOP para eliminar la informacin en lotes de 250 Filas, de esta manera eliminaremos la informacin en pequeas partes generando operaciones ligeras y no una sola operacin que elimine todos los registros en una sola ejecucin.

1. Crearemos una tabla temporal para insertar los 5000 registros.


USE prueba; GO -- Creando la tabla Temporal. DECLARE @tabla TABLE(id BIGINT, nombre VARCHAR(100)); DECLARE @j bigint = 1;

-- Insertanto los 5000 registros en la tabla temporal. WHILE @j <= 5000 BEGIN INSERT INTO @tabla VALUES(@j,'Usuario' + CAST(@j AS varchar(4))); SET @j = @j + 1; END

2. Contamos los datos Insertados.

3. Recorremos los registros y los eliminamos en fragmentos de 250 registros.


-- Recorriendo los resgistros de la tabla. WHILE (SELECT COUNT(*)FROM @tabla)> 0 BEGIN DELETE TOP(250) -- Eliminando en fragmentos de 250 registros FROM @tabla END

El script completo quedara de la siguiente manera:


USE prueba; GO SET NOCOUNT ON; -- Creando la tabla Temporal. DECLARE @tabla TABLE(id BIGINT, nombre VARCHAR(100)); DECLARE @j bigint = 1; -- Insertanto los 5000 registros en la tabla temporal. WHILE @j <= 5000 BEGIN INSERT INTO @tabla VALUES(@j,'Usuario' + CAST(@j AS varchar(4))); SET @j = @j + 1; END --------------------------------------------------->>> --------------------------------------------------->>> -- Contando los registros antes de la eliminacin. SELECT COUNT(id) AS 'Antes de eliminar' FROM @tabla --------------------------------------------------->>> --------------------------------------------------->>>

SET NOCOUNT OFF; -- Recorriendo los resgistros de la tabla. WHILE (SELECT COUNT(*)FROM @tabla)> 0 BEGIN DELETE TOP(250) -- Eliminando en fragmentos de 250 registros FROM @tabla END --------------------------------------------------->>> --------------------------------------------------->>> -- Contando los registros despues de la eliminacin. SELECT COUNT(id) AS 'Despues de eliminar' FROM @tabla --------------------------------------------------->>> --------------------------------------------------->>>

Resultado:

Espero les sea de ayuda, dejen comentarios y por favor apyenme votando por mi Blog.

Apyame votando aqu: http://blogit.ms/TopBloggers.aspx en la categora SQL Server. Los pasos para votar estn aqu te llevara 3 min: Clic Aqu. Etiquetas de Technorati: SQL 2008,DELETE,TOP,Chunking Data.
Comentarios : 1 comentario Etiquetas: Chunking Data., DELETE, SQL 2008, TOP Categoras : SQL

[SQL 2008] Manipulacin de Errores MS SQL Server 2008.


15 06 2009

Saludos amigos, nuevamente les dejo un tema que traduje y aprend, para el manejo de Errores en SQL Server 2008, considero es muy bueno y que ser para algunos la opcin perfecta a utilizar en nuestras aplicaciones de bases de datos. Mensajes de Error definidos por el Sistema y definidos por el Usuario. Este tema se refiere a la visualizacin de errores definidos por el sistema y la agregacin de mensajes de error definidos por el usuario a la instancia de SQL Server. La tabla sys.messages contiene una fila por cada mensaje de error definido por el usuario y mensajes integrados en la instancia de SQL Server.

Los mensajes de error integrados son aquellos que se plantearon en respuesta a los errores estndar de SQL Server. Los mensajes de error definidos por el usuario se utilizan comnmente en aplicaciones de terceros (third-party applications), que definen un conjunto de mensajes de error para usarse dentro de una aplicacin. Los mensajes de error definidos por el usuario permiten la parametrizacin, lo que significa que puede crear sus propios mensajes, los cuales permitirn una personalizacin basada en parmetros. Visualizando la Informacin de Error del Sistema. Para esto puede utilizar la vista del catalogo de sistema sys.messages para ver todos los mensajes de error del sistema y los definidos por el usuario en la instancia de SQL Server, como se muestra a continuacin.
SELECT m.message_id, m.severity, m.is_event_logged, m.[text] FROM sys.messages m INNER JOIN sys.syslanguages l ON m.language_id = l.msglangid WHERE l.alias = 'Spanish' ORDER BY m.severity DESC, m.[text]

En la consulta anterior solo se mostraran los mensajes del lenguaje Espaol, el resultado filtrado para fines de ejemplo seria el siguiente:

Explicando la tabla:

message_id: Identificador del mensaje. severity: Nivel de gravedad. is_event_logged: Se usa si el error se escribe en el registro de eventos de Windows. text: Texto del mensaje.

Los rangos de nivel de gravedad Severity son de 1 a 25, con las siguientes categorizaciones implcitas: 0 al 10: Solo son mensajes informativos.

11 al 16: Son errores de motor de base de datos que pueden ser corregidos por el usuario, como son los objetos de la base de datos que faltan cuando se ejecuta la consulta, sugerencias de bloqueo no compatibles, permisos denegados, bloqueos de transaccin y errores de sintaxis. Por ejemplo, una violacin de llave primaria PRIMARY KEY devolver un error de nivel de gravedad 14. Un error de divisin entre cero devuelve un error de nivel de gravedad 16. 17 al 19: Son errores que necesitan ser atendidos por el sysadmin, por ejemplo, si SQL Server se ha quedado sin recursos de memoria, o si se han alcanzado los lmites del motor de base de datos. 20 al 25: Son errores fatales y de problemas del sistema, como los son hardware o software daado que afecta a la base de datos, problemas de integridad y errores de los medios de comunicacin. Como pudieron notar la columna de texto en sys.messages contiene el mensaje de error real que se presenta al usuario desde el motor de base de datos. Observe que algunos mensajes tienen signos de porcentaje y otros smbolos combinados dentro de ellos:

El signo % es un parmetro de sustitucin que permite al motor de base de datos personalizar la salida del mensaje de error basado en el contexto actual de la base de datos y error de evento. Los valores concatenados para el signo % indican el tipo de dato y la longitud del parmetro de sustitucin. Creacin de un mensaje de error definido por el usuario. Para crear un nuevo mensaje de error definido por el usuario se hace utilizando el procedimiento almacenado de sistema sp_addmessage, tal vez desee crear sus propios mensajes de error personalizados para sus aplicaciones, y a si garantizar la coherencia a travs de rutinas para el manejo de errores especficos de aplicacin. Para crear un nuevo mensaje de error y agregarlo a la vista de sistema sys.messages, tendremos que ejecutar el siguiente procedimiento almacenado sp_addmessage, para que posteriormente lo invoquemos con el comando RAISERROR(). Sintaxis: sp_addmessage [ @msgnum = ] msg_id , [ @severity = ] severity , [ @msgtext = ] msg

[ , [ @lang = ] language ] [ , [ @with_log = ] with_log ] [ , [ @replace = ] replace ] Descripcin de los parmetros: msg_id: Es el identificador del error proporcionado por el usuario, que puede ser entre 50,001 y 2,147,483,647. El ID del mensaje no es de la clave nica o llave primara de la tabla; en su lugar, la clave nica esta compuesta por la combinacin del ID del mensaje y el ID de idioma.

severity: Define el nivel de gravedad del mensaje (1 a 25). msg: Representa el mensaje de error real, que utiliza un tipo de datos nvarchar(255). language: Especifica el idioma en el que est escrito el mensaje de error. with_log: Esto define si el mensaje se escribir o no en el Registro de errores de aplicacin para Windows cuando se invoque el error. Replace: Cuando se especifica, El existente error definido por el usuario (basado en ID del mensaje y el lenguaje) es sobrescrito con los nuevos parmetros pasados al procedimiento almacenado del sistema.

Ahora crearemos nuestro propio mensaje de error definido por el usuario: Nota importante: En mi caso estoy trabajando sobre un servidor configurado con Espaol (Spanish), y al intentar crear un mensajes de Error, me sale el siguiente mensaje de error:

Para esto debemos primero crear una versin de nuestro mensaje de error para el lenguaje Ingles (English), esto es por que el lenguaje nativo de SQL Server es el Ingles. Ahora si creemos nuestro mensaje de error:

Creando el mensaje en Ingles:

-- Creando un mensaje de error en Ingles. EXEC sp_addmessage 70003, 14, N'You dont have permission in the current table %s contact the database administrator.', 'English' GO

Creando el mensaje en Espaol:

-- Creando un mensaje de error en Espaol. EXEC sp_addmessage 70003, 14, N'No tiene permisos en la tabla actual %1! contacte al administrador de base de datos.', 'Spanish' GO

Invocando los mensajes de error con RAISERROR():

-- Usando el mensaje creado con el comando RAISERROR. -- Ingles SET LANGUAGE us_english; RAISERROR (70003, 14, 1, N'dbo.DEMO_ROLES') -- Espaol SET LANGUAGE Espaol; RAISERROR (70003, 14, 1, N'dbo.DEMO_ROLES')

Resultado:

Por ltimo vale la pena mencionar que para crear los parmetros en versiones no inglesas, deben utilizar nmeros seguidos del signo de exclamacin ! que coincidan con los parmetros del mensaje original como lo muestro en el siguiente ejemplo:

Casi lo olvido, falta indicar como eliminar un mensaje de error, esto se realiza con la siguiente sintaxis: sp_dropmessage [ @msgnum = ] message_number [ , [ @lang = ] language ] Ejemplo:
EXEC sp_dropmessage 70003

Espero se de ayuda para ustedes, por favor dejen comentarios y apyenme votando por mi blog.

Apyame votando aqu: http://blogit.ms/TopBloggers.aspx en la categora SQL Server. Los pasos para votar estn aqu te llevara 3 min: Clic Aqu. Etiquetas de Technorati: Error handlig SQL,Errores SQL,RAISERROR,sp_addmessage,sp_dropmessage
Comentarios : 2 Comentarios Etiquetas: Error handlig SQL, Errores Categoras : SQL

SQL, RAISERROR, sp_addmessage, sp_dropmessage

[SQL] Por qu utilizar Tablas Temporales Locales, Globales o Variables de Tabla?.


12 06 2009

Saludos amigos en esta ocasin leyendo me encontr con un tema muy interesante acerca de las tablas temporales en SQL, les dejo lo que traduje del tema con una explicacin y ejemplo de como crear tablas temporales locales, globales y variables de tabla, dentro del Motor de Base de Datos de SQL Server 2008. Tablas Temporales. Las tablas temporales son consideradas tablas regulares, y estas se almacenan automticamente en la base de datos de tempdb. Las tablas temporales se pueden usar en los siguientes escenarios:

Como alternativa a los cursores: por ejemplo, en lugar de utilizar un cursor de TransactSQL para recorrer un conjunto de resultados y realizar tareas basadas en cada fila, en su lugar puede utilizar una tabla temporal. Usando un bucle WHILE, puede recorrer cada fila de la tabla y realizar la accin de la fila especificada, posteriormente debe eliminar la fila de la tabla temporal. Como almacenamiento incremental de conjuntos de resultados: Por ejemplo, imaginemos que tiene una sola consulta SELECT que realiza una combinacin JOIN con diez tablas. A veces las consultas con varias combinaciones JOINS pueden funcionar de manera incorrecta. Una tcnica para intentar es la de fraccionar o fragmentar una consulta grande en consultas ms pequeas. Si usamos tablas temporales, podemos crear conjuntos de resultados intermedios basados en consultas de menor tamao, en lugar de intentar ejecutar una consulta nica que sea demasiado grande y de combinaciones mltiples multi-joined. Como temporal en la sobrecarga baja de bsqueda de tabla: Por ejemplo, imagine que usted est utilizando una consulta que tarda varios segundos en ejecutarse, pero slo muestra un pequeo conjunto de resultados, el cual desea utilizar en varias reas de su procedimiento almacenado, pero cada vez que se llama se incurre en el tiempo de ejecucin de la consulta general. Para resolver esto, puede ejecutar la consulta una sola vez en el procedimiento, llenando una tabla temporal, de esta manera se puede hacer referencia a la tabla temporal en varios lugares en su cdigo, sin incurrir en una sobrecarga de resultados adicional. Existen dos tipos de tablas temporales: Globales y Locales. Las tablas temporales Locales se escriben anteponiendo el smbolo # y tablas temporales Globales con el doble smbolo ##. Tablas temporales Locales. Las tablas temporales Locales estn disponibles para usarse por cada conexin actual del usuario que los cree. Varias conexiones pueden crear una tabla temporal con mismo nombre, esto solo para para tablas temporales Locales sin causar conflictos. La representacin interna de la tabla local tiene un nombre nico, para no estar en conflicto con otras tablas temporales con el mismo nombre creado por otras conexiones en la tempdb. Las tablas temporales locales son eliminadas con el comando DROP o se eliminan automticamente de memoria cuando se cierra la conexin del usuario. Creando la tabla temporal Local:
CREATE TABLE #ProductosResumen ( idProducto int NOT NULL PRIMARY KEY, nombre varchar(75) NULL,

precio smallmoney NULL );

Insertando datos en la tabla temporal global.


INSERT #ProductosResumen (idProducto, nombre , precio) SELECT id,nombre, precio FROM dbo.DEMO_PRODUCTO ORDER BY nombre;

Seleccionando los datos de la tabla temporal.


--Seleccionando los datos de la tabla temporal SELECT * FROM #ProductosResumen; -- Resumen de precios de la tabla temporal SELECT AVG(precio) FROM #ProductosResumen;

Resultado.

Eliminando la tabla.
-- Eliminando la tabla temporal DROP TABLE #ProductosResumen;

Nota: Para que el ejemplo funcione deben de ejecutar en un solo bloque de instrucciones todo el cdigo que coloque anteriormente. Para este caso yo llene mi tabla temporal con datos de una tabla que ya tenia creada en la base de datos, ustedes pueden utilizar un insert normal. Tablas Temporales Globales. Las tablas temporales Globales tienen un alcance diferente al de las tablas temporales Locales. Una vez que una conexin crea una tabla temporal Global, cualquier usuario con permisos adecuados sobre la base de datos puede acceder a la tabla. A diferencia de tablas temporales Locales, no se pueden crear versiones simultneas de una tabla temporal Global, ya que esto generar un conflicto de nombres.

Las tablas temporales Globales de eliminan explcitamente de SQL Server ejecutando DROP TABLE. Tambin se eliminan automticamente despus de que se cierra la conexin que la creo, la tabla temporal Global no es referenciada por otras conexiones, pero es muy raro ver que se utilicen tablas temporales Globales en bases de datos en produccin. Es importante considerar cuando una tabla va o debe ser compartida a travs de conexiones, se debe crear una tabla real, en lugar de una tabla temporal Global. No obstante, SQL Server ofrece esto como una opcin. Creando la tabla temporal Global:
--Creando la tabla temporal Global CREATE TABLE ##Roles ( idRol int NOT NULL PRIMARY KEY, nombre varchar(30) NULL, activo bit NULL );

Insertando y seleccionando datos de la tabla temporal global:


-- Insertando datos en la tabla temporal global INSERT INTO ##Roles VALUES(1,'Administrador',1), (2,'Supervisor',1), (3,'Programador',0) -- Seleccionando los datos de la tabla temporal global SELECT * FROM ##Roles;

Resultado:

Eliminando la tabla temporal global desde la conexin original que la creo.


-- Eliminando la tabla temporal global DROP TABLE ##Roles;

Variables de Tabla. Por otro lado tenemos las Variables de Tabla que son un tipo de datos que puede ser utilizados en un lote Transact-SQL (Batch), procedimiento almacenado o funcin; estas variables de tabla son creado y definidas de forma similar a una tabla, slo con un alcance

de vida estrictamente definido. Las Variables de tabla suelen ser buenos reemplazos de tablas temporales siempre y cuando el conjunto de datos es pequeo. Razones para usar las variables de tabla:

Duracin o alcance. La duracin de la variable de tabla slo vive durante la ejecucin del lote, funcin, o procedimiento almacenado. Tiempos de bloqueo ms cortos. Por el estrecho alcance o tiempo de vida. Menos re compilaciones cuando se usa en los procedimientos almacenados.

Como se menciono anteriormente, hay inconvenientes para utilizar las variables de tabla. El rendimiento de las variable de tabla se ve afectado cuando el resultado es demasiado grande o cuando los datos de la columna de cardinalidad son fundamentales para la optimizacin del proceso de consulta. La sintaxis para crear una variable de tabla es similar a la de crear una tabla normal, se utiliza la palabra clave DECLARE y el nombre de tabla, anteponiendo el smbolo @: DECLARE @TableName TABLE (column_name <data_type> [ NULL | NOT NULL ] [ ,...n ] ) Creando una variable de tabla:
-- Creando la variable de tipo tabla. DECLARE @EstatusUsuarios TABLE ( idEstatus int NOT NULL PRIMARY KEY, nombre varchar(30) NULL )

Insertando y seleccionando datos de la variable tabla:


-- Insertando en la variable de tipo tabla. INSERT INTO @EstatusUsuarios VALUES (1,'Activo'), (2,'Inactivo'), (3,'Bloqueado') -- Consultando datos de la variable de tipo tabla. SELECT * FROM @EstatusUsuarios;

Al terminar la ejecucin del batch o bloque de instrucciones se eliminara la variable tabla, o si colocamos una instruccin GO automticamente se eliminara y no la podremos utilizar como los muestro en el siguiente ejempl, recuerde que los ejemplo para claridad los coloque separados, pero los debe de ejecutar completos como lo hago abajo para el caso de la variables de tabla:
-- Creando la variable de tipo tabla. DECLARE @EstatusUsuarios TABLE ( idEstatus int NOT NULL PRIMARY KEY,

nombre varchar(30) NULL ) -- Insertando en la variable de tipo tabla. INSERT INTO @EstatusUsuarios VALUES (1,'Activo'), (2,'Inactivo'), (3,'Bloqueado') -- Consultando datos de la variable de tipo tabla. SELECT * FROM @EstatusUsuarios; -- Al ejecutarse el go o el bloque de instrucciones --la variable tabla se eliminara auitomaticamente. Go SELECT * FROM @EstatusUsuarios;

Como podrn notar en el primer select nos regreso:

Y para el segundo select:

Esto es por que como lo comente anteriormente el tiempo de vida de la variable tabla termina al ejecutarse el bloque de instrucciones, en este caso termino con el GO. Cuando encontremos problemas de rendimiento, debemos de asegurarnos de probar todas las soluciones y alternativas, y no necesariamente asumir que una de las opciones (tablas Temporales) son menos deseables que otras (variables de tabla). Espero les sea de ayuda, se que esta un poco largo el Post, pero creo vale la pena leerlo.

Apyame votando aqu: http://blogit.ms/TopBloggers.aspx en la categora SQL Server. Los pasos para votar estn aqu te llevara 3 min: Clic Aqu. Etiquetas de Technorati: Tablas temporales,temporary tables,Local Tables,Global Tables,Variables de Tabla,SQL 2008
Comentarios : 10 Comentarios Etiquetas: Global Tables, Local Tables, SQL 2008, Tablas

temporales, temporary tables,

Variables de Tabla Categoras : SQL

Cmo votar por este Blog?


2 06 2009

Amigos, en esta ocasin les pido su apoyo para contar con su invaluable voto, es la primera vez que concurso en Blog IT, como sabrn es una competencia de blogs con diferentes categoras, yo estoy participando en la de SQL Server, para hacer esto ms breve espero contar con su voto, les dejo los pasos para que lo puedan hacer, me despido envindoles un cordial saludo. Nota: En ocasiones el sitio de votacin esta muy lento, por favor se paciente y apyame es importante para mi contar con tu voto. Paso 1. Ir al siguiente enlace: http://www.blogit.ms/TopBloggers.aspx o hacer clic en el siguiente botn:

Paso 2. Seleccione la categora de SQL Server y haga clic en el botn buscar. Nota: No se a que se deba pero se tarda unos instantes en cargar la pgina, por favor sea paciente y espere un poco .

Paso 3. Busque mi blog http://sqlpsykrest.wordpress.com y de clic en el botn Votar.

Paso 4. Ingrese su correo electrnico.

Paso 5. Confirme el voto. Le llegara un correo electrnico en el cual se le pedir que haga clic en un enlace para confirmar el voto. Nota: el correo muchas veces llega al SPAM o correo no deseado.

Listo amigos con esto su voto quedara contabilizado, el tiempo estimado es de 3 min, por favor apyenme, sin duda espero contar con ustedes.

Comentarios : 9

Comentarios

Categoras : SQL

[SQL] Previniendo la Inyeccin de cdigo.


1 06 2009

Saludos amigos, encontr un ejemplo de una funcin escalar Scalar User-Defined Functions, por @Joseph Sack, la cual verifica si una instruccin TSQL esta intentando ejecutar cdigo malintencionado que puede afectar de manera catastrfica la informacin y estructura de nuestras bases de datos. Como muchos de ustedes sabrn al tener sentencias TSQL no parametrizadas corremos un enorme riesgo de sufrir ataques de inyeccin, el script que a continuacin les comparto verifica que la sentencia a ejecutar no contenga cdigo que intente alterar los datos o la estructura de los mismos. 1. Creamos una tabla llamada DEMO_ROLES, a la cual insertaremos datos a travs de Sentencias dinmicas SQL. Creando la tabla:
USE prueba; GO CREATE TABLE dbo.DEMO_ROLES( id_rol bigint IDENTITY(1,1) NOT NULL, rol varchar(50) NOT NULL,

CONSTRAINT PK_DEMO_ROLES PRIMARY KEY CLUSTERED ([id_rol] ASC) ); GO

Insertando datos:
INSERT INTO dbo.DEMO_ROLES VALUES ('Administrador'), ('Gerente'), ('Supervisor'), ('Desarrollador');

Seleccionando datos con sp_executesql.


DECLARE @SQLtext nvarchar(350); SET @SQLtext = N'SELECT * FROM dbo.DEMO_ROLES'; EXEC sp_executesql @SQLtext; GO

Resultado:

2. Simulando la Inyeccin de cdigo. Para este paso simularemos que la cadena de cdigo que se va a ejecutar fue modificada malintencionadamente y le concatenaron (Inyectaron) una sentencia que borra la tabla DEMO_ROLES.

Ejecutando la sentencia:
DECLARE @SQLtext nvarchar(350); SET @SQLtext = N'SELECT * FROM dbo.DEMO_ROLES' + ';DROP TABLE dbo.DEMO_ROLES'; EXEC sp_executesql @SQLtext; GO

Nota: Por el orden en el que se ejecutan las sentencias, primero se seleccionan los datos y despus se elimina la tabla, por lo tanto hasta la prxima ejecucin de las sentencias se producir una excepcin donde el SQL nos indicara que la tabla

DEMO_ROLES no existe, esto a cause de que fue eliminada por la simulacin de la inyeccin de cdigo. Resultado 1 (Primera ejecucin con inyeccin simulada):

Resultado 2 (Ejecuciones posteriores a la inyeccin simulada):

Ahora como lo resolvemos: 1. Para esto tenemos que crear la tabla DEMO_ROLES, e insertar los datos (vea la parte inicial del Post). 2. Crear una funcin escalar la cual se encargara de verificar si las sentencias a ejecutar son maliciosas y contienen cdigo que pueda alterar nuestra base de datos.
USE prueba; GO CREATE FUNCTION [dbo].[udf_CheckForSQLInjection] (@TSQLString varchar(max)) RETURNS BIT AS BEGIN DECLARE @IsSuspect bit -- UDF assumes string will be left padded with a single space SET @TSQLString = ' ' + @TSQLString IF (PATINDEX('% xp_%' , @TSQLString ) <> 0 OR PATINDEX('% sp_%' , @TSQLString ) <> 0 OR PATINDEX('% DROP %' , @TSQLString ) <> 0 OR PATINDEX('% GO %' , @TSQLString ) <> 0 OR PATINDEX('% INSERT %' , @TSQLString ) <> 0 OR PATINDEX('% UPDATE %' , @TSQLString ) <> 0 OR PATINDEX('% DBCC %' , @TSQLString ) <> 0 OR PATINDEX('% SHUTDOWN %' , @TSQLString )<> 0 OR PATINDEX('% ALTER %' , @TSQLString )<> 0 OR PATINDEX('% CREATE %' , @TSQLString ) <> 0OR PATINDEX('%;%' , @TSQLString )<> 0 OR PATINDEX('% EXECUTE %' , @TSQLString )<> 0 OR PATINDEX('% BREAK %' , @TSQLString )<> 0 OR PATINDEX('% BEGIN %' , @TSQLString )<> 0 OR PATINDEX('% CHECKPOINT %' , @TSQLString )<> 0 OR PATINDEX('% BREAK %' , @TSQLString )<> 0 OR PATINDEX('% COMMIT %' , @TSQLString )<> 0 OR PATINDEX('% TRANSACTION %' , @TSQLString )<> 0 OR

PATINDEX('% CURSOR %' , @TSQLString )<> 0 OR PATINDEX('% GRANT %' , @TSQLString )<> 0 OR PATINDEX('% DENY %' , @TSQLString )<> 0 OR PATINDEX('% ESCAPE %' , @TSQLString )<> 0 OR PATINDEX('% WHILE %' , @TSQLString )<> 0 OR PATINDEX('% OPENDATASOURCE %' , @TSQLString )<> 0 OR PATINDEX('% OPENQUERY %' , @TSQLString )<> 0 OR PATINDEX('% OPENROWSET %' , @TSQLString )<> 0 OR PATINDEX('% EXEC %' , @TSQLString )<> 0) BEGIN SELECT @IsSuspect = 1 END ELSE BEGIN SELECT @IsSuspect = 0 END RETURN (@IsSuspect) END; GO

3. Ejecutando las sentencias TSQL con la ayuda de la funcin para verificar la inyeccin de cdigo.
DECLARE @SQLtext nvarchar(350); SET @SQLtext = N'SELECT * FROM dbo.DEMO_ROLES' + ';DROP TABLE dbo.DEMO_ROLES'; IF dbo.udf_CheckForSQLInjection(@SQLtext) = 1 BEGIN PRINT ('Advertencia: El cdigo es sospecho de contener cdigo malicioso (TSQL Inyection).') END ELSE BEGIN EXEC sp_executesql @SQLtext; END

Resultado 1 con inyeccin de cdigo:

Resultado 2 sin inyeccin de cdigo:

Pueden hacer la modificaciones que crean necesarias a la funcin de inyeccin de cdigo, ya que el funcionamiento y validacin depende de las necesidades que deseemos cubrir. Bueno amigos me despido y con gusto espero comentarios, por favor apyenme votando por mi blog en http://blogit.ms en la categora de SQL Server. Etiquetas de Technorati: TSQL Injection,Inyeccin de cdigo SQL,SQL
Comentarios : Deja un Comentario Etiquetas: Inyeccin de cdigo SQL, SQL, TSQL Injection Categoras : SQL

[SQL] Cifrando un Procedimiento almacenado en MS SQL Server 2008


29 05 2009

Saludos amigos, he preparado un breve ejemplo de como Cifrar Encriptar un procedimiento almacenado desde MS SQL Server 2008. Para empezar crearemos un procedimiento almacenado bsico, este procedimiento ejecutara una consulta a una tabla llamada DEMO_USUARIOS de la base de datos PRUEBA. 1.Insertando los datos:
USE prueba; GO INSERT INTO DEMO_USUARIOS VALUES ('Ivan','Ragel','ivan.rangel.c@gmail.com','trew',GETDATE()), ('Claudia','Prez','clau@gmail.com','456789',GETDATE()), ('Mariana','Ragel','mariana@gmail.com','123456',GETDATE()), ('Noriga','Rojas','negro@gmail.com','963852',GETDATE()), ('Pedro','Infante','infante@gmail.com','789456',GETDATE()); GO SELECT * FROM DEMO_USUARIOS; GO

Resultado:

2. Transformando la consulta a Procedimiento Almacenado bsico:


--Creando el Procediemiento almacenado. CREATE PROCEDURE dbo.ObteniendoUsuariosDemo AS SELECT * FROM DEMO_USUARIOS ORDER BY nombre,apellidos GO --Ejecutando el Procedimiento almacenado. EXEC dbo.ObteniendoUsuariosDemo; GO --Mostrando la definicin del Procedimiento almacenado. EXEC sp_helptext ObteniendoUsuariosDemo; GO

En el batch de T-SQL anterior podemos observar que: a. Estamos creando un procedimiento almacenado.

b. Ejecutando el procedimiento almacenado.

c. Mostrando la definicin del procedimiento almacenado.

Ahora vamos a CIFRAR (Encriptar) el procedimiento almacenado aplicando un ALTER PROCEDURE en combinacin con la clausula WITH ENCRYPTION como se muestra en el siguiente ejemplo:
ALTER PROCEDURE dbo.ObteniendoUsuariosDemo WITH ENCRYPTION AS SELECT * FROM DEMO_USUARIOS ORDER BY nombre,apellidos GO

d. Modificando el procedimiento almacenado para el cifrado de seguridad.

Es importante mencionar que al aplicar WITH ENCRYPTION no podr tener acceso a la definicin del procedimiento almacenado, ni podr modificar al cdigo del mismo, as que cuando aplique el cifrado debe de estar completamente seguro de tener guardado el cdigo con el que creo dicho procedimiento almacenado. e. Ejecutando el procedimiento almacenado CIFRADO (funciona de manera similar al creado de manera no cifrada).

f. Consultando la definicin del procedimiento almacenado cifrado.

g. Tratando de modificar el procedimiento cifrado.

Bueno, espero les sea de ayuda, espero sus comentarios, dudas o sugerencias, por favor apyenme botando por mi blog en la categora de SQL Server en www.blogit.ms Etiquetas de Technorati: WITH ENCRYPTION,CIFRADO DE SP,SQL,Procedimiento almacenados
Comentarios : 12 Comentarios Etiquetas: CIFRADO DE SP, Procedimiento Categoras : SQL

almacenados, SQL, WITH ENCRYPTION

[SQL] Creando un resumen de las Tablas de una Base de Datos en SQL 2008/2005.
26 05 2009

Saludos amigos en esta ocasin he elaborado un pequeo script en T-SQL 2008 el cual obtiene un Resumen de la estructura de las tablas de una base de datos. Todo esto consiste en consultar las siguientes 3 tablas de sistema:
sys.tables sys.columns sys.types

La tabla sys.tables contiene todas las tablas de una base de datos. La tabla sys.columns contiene todas la columnas que se encuentran en una tabla con informacin como el el orden de la columna, tipo de dato, si se le puede asignar un valor nulo o no, si es una columna de identidad, etc. La tabla sys.types contiene los tipos de datos que utilizamos al crear las columnas de una tabla en una base de datos como son: Varchar, Char, Int, Bigint, Bit, datetime, etc. La consulta:

USE prueba; GO SELECT t.name AS Tabla, t.type_desc AS TipoTabla , c.column_id AS Orden, c.name AS Columna, tp.name AS TipoDato, c.max_length AS Longitud, (CASE c.is_nullable WHEN 1 THEN 'S' WHEN 0 THEN 'No' END) AS ValorNulo, (CASE c.is_identity WHEN 1 THEN 'S' WHEN 0 THEN 'No' END) AS LlavePrimaria FROM sys.tables t INNER JOIN sys.columns c ON t.object_id = c.object_id INNER JOIN sys.types tp ON c.system_type_id = tp.system_type_id ORDER BY t.name, c.column_id

Etiquetas de Technorati: SQL 2008,SQL 2005. Tablas de Systema de base de datos,Columnas de BD,Tipos de columna,resumen de una BD Ahora vean el resultado de la consulta anterior y la estructura de la tabla desde el explorador de objetos.

espero les sea de ayuda, a la hora de elaborar un resumen de una base de datos o algo que les pida su jefe , con gusto espero sus cometarios.

Comentarios : 2 Comentarios Etiquetas: Columnas de BD, resumen de una datos, SQL 2008, Tipos de columna Categoras : SQL

BD, SQL 2005. Tablas de Systema de base de

[SQL] Como planear un Procedimiento almacenado en SQL Server 2008 (Creacin y ejecucin).
26 05 2009

Saludos amigos, no se si sea realmente el nombre correcto para este post, le idea es que a partir de una sentencia SQL (Select, Insert, Update, Delete, Etc) puedan lograr parametrizar la consulta y posteriormente elaborar su procedimiento almacenado. Paso 1. Sentencia SQL a ejecutar.
USE prueba; GO INSERT INTO dbo.DEMO_PRODUCTO (nombre, precio, descripcion, fecha) VALUES('Whisky', 275.50,'12 Aos de aejamiento, promocin 2x1',GETDATE()); GO SELECT TOP 1 * FROM dbo.DEMO_PRODUCTO ORDER BY id DESC; GO

Nota: deben de asegurarse que la sentencia SQL que ejecuten se realice correctamente. Paso 2. Parametrizar la Sentencia SQL. Por cada uno de los campos que se requieren al insertar (para el caso de este ejemplo), deben de convertirse en variables T-SQL con el tipo de dato correspondiente, asignarles el valor del campo a Insertar y sustituirlos en la sentencia SQL.
USE prueba; GO DECLARE @producto varchar(100), @precio smallmoney, @descripcion varchar(750); SET @producto = 'Agua mineral'; SET @precio = 12.50; SET @descripcion = 'Agua mineral de 2 litros'; INSERT INTO dbo.DEMO_PRODUCTO (nombre, precio, descripcion, fecha) VALUES(@producto, @precio,@descripcion,GETDATE()); GO SELECT TOP 2 * FROM dbo.DEMO_PRODUCTO ORDER BY id DESC; GO

Paso 3. Convertir el Bacth T-SQL a Procedimiento almacenado. Ya que tenemos la sentencia parametrizada, el paso final es convertirla en procedimiento almacenado, para esto tenemos que agregar la estructura de un STORE PROCEDURE SP de SQL Server 2008 como lo muestra el siguiente ejemplo:
CREATE PROCEDURE <Procedure_Name, sysname, Procedure_Name> <@param1, sysname, @p1> <datatype_for_param1, , int> = <default_value_for_param1, , 0>, <@param2, sysname, @p2> <datatype_for_param2, , int> = <default_value_for_param2, , 0> AS <Instrucciones T-SQL (Insert, Select, Update, Delete, ETC)> GO

La primera parte es asignarle un nombre al SP. La Segunda parte es crear los parmetros que recibir el SP. Como tercera parte es crear el Batch de T-SQL que se ejecutara al llamar a nuestro SP. Ejemplo:

El cdigo:
CREATE PROCEDURE InsertaProductoSP @producto varchar(100), @precio smallmoney, @descripcion varchar(750) AS INSERT INTO dbo.DEMO_PRODUCTO (nombre, precio, descripcion, fecha) VALUES(@producto, @precio,@descripcion,GETDATE()); GO

La ejecucin:
USE prueba;

GO EXEC InsertaProductoSP 'Hielos', 12.90, 'Bolsa de hielos de 3 kilos'; GO SELECT TOP 3 * FROM dbo.DEMO_PRODUCTO ORDER BY id DESC; GO

Resultado:

Espero les sea de ayuda, para algunos usuarios el ejemplo les puede parecer sumamente sencillo (y lo es), pero tambin creo que a los usuarios que inician los ubicara un poco ms de como desarrollar en Transact SQL 2008, espero sus comentarios. Etiquetas de Technorati: Store Procedure,SQL 2008,Crear Procedieminto almacenado,SQL,EXEC SP
Comentarios : 10 Comentarios Etiquetas: Crear Procedieminto almacenado, EXEC Categoras : SQL

SP, SQL, SQL 2008, Store Procedure

[ASP .NET] Creando una WebSlice con datos de una BD y un Repeater SQL 2008
15 05 2009

Saludos amigos, una novedad de ASP .Net en conjunto con Internet Explorer 8, es que nos permite crear Web Slice, que son pequeos extractos con informacin de pginas Web, las cuales podemos agregar a nuestra Barra de favoritos de Internet Explorer 8. A continuacin les dejo un ejemplo de la creacin de una Web Slice, la cual se llena con informacin de una base de datos en SQL Server 2008 a travs de un objeto Repeater. Nota: Debe configurar la cadena de conexin a la base de datos, vea la entrada anterior: http://sqlpsykrest.wordpress.com/2009/05/14/vs-2008asp-net-crear-una-cadena-de-conexinen-asp-net-y-ejecutar-un-comando-a-una-bd-de-sql-server-2008/ Paso 1, debemos agregar la Web Slice, esto consiste en insertar un DIV que tenga una clase CSS llamada hslice y ID igual a 1. Ejemplo:
<div class="hslice" id="1">

<p class="entry-title">Ttulo de la Web Slice</p> <div class="entry-content"> <!--Contenido de la Web Slice--> </div> </div>

Para indicar el ttulo de la Web Slice, se debe colocar una clase CSS aplicada a un elemento XHTML Prrafo <p> llamada entry-title, el contenido de la Web Slice se determina agregando un elemento DIV con una clase CSS llamada entry-content dentro del DIV principal hslice. Paso 2, Agregaremos como contenido de la Web Slice un objeto REPEATER, el cual selecciona datos sobre Productos de una base de datos en SQL Server 2008. Ejemplo:
<h2>Ejemplo de WebSlice</h2> <div class="hslice" id="1"> <p class="entry-title">WebSlice desde SqlPsyKrest Blog.</p> <div class="entry-content"> <asp:Repeater runat="server" ID="rProductos"> <HeaderTemplate> <table class="tabla" cellpadding="3px" cellspacing="0" > <tr> <td colspan="4" class="titulo" align="center" >Productos</td> </tr> </HeaderTemplate> <FooterTemplate> </table> </FooterTemplate> <ItemTemplate> <tr> <td class="nombre"><%#DataBinder.Eval(Container.DataItem, "nombre")%></td> <td class="precio"><%#DataBinder.Eval(Container.DataItem, "precio")%></td> </ItemTemplate> <AlternatingItemTemplate> <td class="nombre"><%#DataBinder.Eval(Container.DataItem, "nombre")%></td> <td class="precio"><%#DataBinder.Eval(Container.DataItem, "precio")%></td> </tr> </AlternatingItemTemplate> </asp:Repeater> </div> </div>

El DataBinder.Eval obtiene los datos de las columnas del comando que se ejecuta en la base da datos.

Paso3, Agreguemos en el code-behine en el evento Load del formulario Web la ejecucin del comando de la base datos, el cual obtendr la informacin de los productos que se cargaran en un objeto Repeater llamado repeatProductos que posteriormente se mostrarn en la Web Slice. Ejemplo:
Imports Imports Imports Imports System.Web System.Web.Configuration System.Data System.Data.SqlClient

Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Me.IsPostBack Then Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("cnx").Connection String) Dim comm As New SqlCommand("SELECT nombre, precio FROM DEMO_PRODUCTO", conn) comm.CommandType = CommandType.Text Dim ds As DataSet = Nothing Dim da As SqlDataAdapter = Nothing Try Using conn conn.Open() ds = New DataSet() da = New SqlDataAdapter() da.SelectCommand = comm da.Fill(ds) End Using comm.Dispose() Catch ex As Exception Finally If conn.State = ConnectionState.Open Then conn.Close() conn.Dispose() End If End Try Me.repeatProductos.DataSource = ds Me.repeatProductos.DataBind() End If

End Sub End Class

En el ejemplo anterior utilizamos un objeto Dataset y un SqlDataAdapter, los cuales reciben la informacin de la base da datos y la almacenan para cargarla en el objeto Repeater llamado repeatProductos, una vez obtenida la informacin, la Web Slice esta terminada y lista para mostrando datos de los productos al usuario.

Paso 4, Agreguemos la Web Slice al Barra de favoritos de Internet Explorer 8:

Por ltimo observen como se agrego la Web Slice a la Barra de favoritos de Internet Explorer 8, de esta manera los usuario pueden estar viendo informacin especifica y actualizada de sus sitios Web con solo dar clic en ella.

Espero les sea de ayuda, me despido de ustedes y quedo en espera de sus comentarios. Etiquetas de Technorati: Web Slice,ASP Net y Base de datos,Repeater
Comentarios : 1

comentario

Etiquetas: ASP Net y Base de datos., Repeater, Web Categoras : ASP NET, SQL

Slice

[VS 2008ASP NET] Crear una cadena de conexin en ASP .NET y ejecutar un comando a una BD de SQL Server 2008.
14 05 2009

Saludos amigos, en esta ocasin les mostrare un ejemplo de como crear una cadena de conexin en ASP .NET con Visual Studio 2008 hacia una base de datos creada en SQL Server 2008. 1. El primer paso es conocer la siguiente informacin de la base de datos y la instancia de SQL a la cual nos vamos a conectar. a) Nombre de la instancia. b) Nombre de la base de datos. c) Usuario y contrasea del usuario que tiene permisos sobre la base de datos. Ejemplo: Instancia: EQUIPO. BD: prueba. User: sa. Pass: sasysadmin. Nota: Si no conoces el nombre de la instancia del SQL server ejecuta el siguiente comando.
USE master; GO SELECT [name], data_source FROM sys.servers;

Resultado:

Nota: SI quieres ver las bases de datos que estn en la instancia del SQL server ejecuta el siguiente comando.

USE master; GO SELECT [name] FROM sys.databases;

Resultado:

2. Ahora creamos un nuevo sitio Web en Visual Studio 2008, en el archivo de configuracin Web ( web.config ), buscamos el elemento <connectionStrings> contenido dentro del elemento raz <configuration> y agregamos una cadena de conexin como lo muestra el siguiente ejemplo:
<connectionStrings> <add name="cnxCurso" connectionString="Data source=EQUIPO; Initial catalog=Prueba; User id=admIvan; Password=123456" providerName="System.Data.SqlClient"/> </connectionStrings>

Explico brevemente la cadena: Deben dar un nombre a la cadena de conexin en esta caso la llamaremos CNX . El atributo connectionString debe tener los siguientes datos: Data source es la instancia que utilizamos en SQL Server. Initial catalog es el nombre de la base de datos a utilizar. User id es el nombre de usuario que se conectara a la base de datos. Password es la contrasea del usuario de la base de datos. Por ltimo el providerName que es un espacio de nombres de System.Data.SqlClient. 3. Agregaremos dos cajas de texto, un botn y una etiqueta en un formulario web.

4. En el Code-Behine de nuestro formulario web agregamos los siguientes espacios de nombres necesarios para conectarnos a las base da datos y trabajar de manera efectiva. Nota: Para ir al code-behine debemos presionar la tecla F7 estando en el formulario Web.
Imports System.Web Imports System.Web.Configuration Imports System.Data Imports System.Data.SqlClient

5. Agregar el siguiente cdigo en el evento clic del botn del formulario web.
Protected Sub btnAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAceptar.Click Dim idUsuario As Integer = 0 Dim msg As String = "Usuario no encontrado en la base de datos." Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("cnxCurso").Conne ctionString) Dim comm As New SqlCommand("SELECT id FROM dbo.PRB_Usuario WHERE Email = @email AND [Password] = @pass", conn) Try With comm .CommandType = CommandType.Text .Parameters.AddWithValue("email", Me.txtUser.Text.Trim()) .Parameters.AddWithValue("pass", Me.txtPass.Text.Trim()) End With Using conn conn.Open()

With comm idUsuario = .ExecuteScalar() .Parameters.Clear() .Dispose() End With If idUsuario > 0 Then msg = "El usuario esta registrado en la base de datos." End If End Using Catch ex As SqlException 'Controlar excepcin SQL Catch ex As Exception 'Controlar exception Finally If conn.State = ConnectionState.Open Then conn.Close() conn.Dispose() End If End Try Me.lblMsg.Text = msg End Sub

Es importante poner atencin a la hora de crear la cadena de conexin ya que el nombre debe de ser el mismo al que se agrego en el archivo de configuracin web (web.config).

El comando al crearlo lleva dos parmetros iniciales, el comando de base de base de datos ( el cual selecciona el id de nuestro usuario) , y la cadena de conexin que utilizara para llevar acabo la ejecucin. Agregamos los parmetros que recibir el comando para poder consultar los datos, a esto se le llama parametrizar sentencias o comandos SQL, para evitar los ataques de inyeccin de cdigo.

Para terminar se abre la conexin, y se ejecutamos el comando SQL de manera Scalar (ExecuteScalar), es decir que solo nos regrese el valor de la primer fila y primer columna del conjunto de resultados obtenidos, para este caso siempre nos regresara un valor, este valor se asigna a nuestra etiqueta que mostrara si el usuario se encuentra o no en la base de datos. Resultado:

Bueno amigos, espero les sea de ayuda, prximamente subir videos. Etiquetas de Technorati: Cadena de conexin VS,connectionString,sqlCommand,sqlConnection,Visual Studio,Select Command ASP Net,ASP Net y Base de datos.
Comentarios : 19 Comentarios Etiquetas: ASP Net y Base de datos., Cadena de conexin VS, connectionString, Select Command ASP Net, sqlCommand, sqlConnection, Visual Studio Categoras : ASP NET, SQL

[SQL 2008] Mtodos abreviados de teclado de MSSQL Server Management Studio.


22 04 2009

Saludos amigos en esta ocasin les dejo un documento que elabore con informacin del MSDN de Microsoft referente a los mtodos abreviados del teclado para el Management

Studio de SQL Server 2008. les dejo una tabla de ejemplo y el enlace para que lo puedan descargar he implementar.

Mtodos abreviados de teclado para activar mens. Mtodos abreviados de teclado para administrar ventanas y barras de herramientas. Mtodos abreviados de teclado para mover el cursor. Mtodos abreviados de teclado para seleccionar texto. Mtodos abreviados de teclado para marcadores. Mtodos abreviados de teclado para el control de rbol. Mtodos abreviados de teclado para el Editor de cdigo. Mtodos abreviados de teclado del depurador de Transact-SQL. Mtodos abreviados de teclado para Microsoft IntelliSense. Mtodos abreviados de teclado para la ventana de documento y el explorador. Mtodos abreviados de teclado para el Explorador de soluciones. Mtodos abreviados de teclado para la Ayuda y los Libros en pantalla. Mtodos abreviados de teclado para bsquedas. Mtodos abreviados de teclado para cortar y pegar. Mtodos abreviados de teclado para el visor de registros. Mtodos abreviados de teclado para el Monitor de actividad. Mtodos abreviados de teclado para el Monitor de replicacin. Mtodos abreviados de teclado para el Visor de conflictos de replicacin.

Mtodos abreviados de teclado para administrar ventanas y barras de herramientas. Accin Cerrar la ventana secundaria MDI actual Imprimir Salir Pasar al modo de pantalla completa Cerrar la ventana de herramientas actual Desplazarse por las siguientes ventanas secundarias MDI Desplazarse por las ventanas secundarias MDI anteriores Ir a la barra de herramientas de la ventana de herramientas actual Ir a la siguiente ventana de herramientas Ir a la ventana seleccionada anteriormente Abrir una nueva ventana del Editor de consultas Estndar CTRL+F4 SQL Server 2000 CTRL+F4

CTRL+P CTRL+P ALT+F4 ALT+F4 MAYS+ALT+ENTRAR MAYS+ALT+ENTRAR MAYS+ESC CTRL+TAB CTRL+MAYS+TAB MAYS+ALT ALT+F6 MAYS+ALT+F6 Sin equivalencia MAYS+ESC CTRL+TAB CTRL+MAYS+TAB Sin equivalencia ALT+F6 MAYS+ALT+F6 CTRL+O

Mostrar el Explorador de objetos F8 CTRL+ALT+G Mostrar Servidores registrados Mostrar el Explorador de plantillas CTRL+ALT+T CTRL+ALT+L Mostrar el Explorador de soluciones F7 Mostrar la ventana Resumen F4 Mostrar la ventana Propiedades Mostrar el cuadro de herramientas CTRL+ALT+X CTRL+K, CTRL+W Mostrar la ventana Marcadores Mostrar la ventana del explorador CTRL+ALT+R CRTL+\, CTRL+E Mostrar la ventana Lista de errores (slo Editor de TransactSQL) @http://msdn.microsoft.com/es-es/library/ms174205.aspx Aqu esta el enlace:

F8 Sin equivalencia CTRL+ALT+T CTRL+ALT+L F7 F4 CTRL+ALT+X Sin equivalencia CTRL+ALT+R CRTL+\, CTRL+E

http://cid597f52750e26b4c6.skydrive.live.com/self.aspx/.Public/M%c3%a9todos%20abreviados%2 0de%20teclado%20para%20MSQL%20Server%202008.pdf Etiquetas de Technorati: Teclas rpidas,Mtodos abreviados,Hot keys,SQL 2008


Comentarios : 2 Comentarios Etiquetas: Hot keys, Mtodos abreviados, SQL 2008, Teclas Categoras : SQL

rpidas

[SQL 2008] Libro Gratis SQL Server 2008.


21 04 2009

Saludos amigos aqu les dejo un link donde pueden descargar un e-Book de SQL server 2008, les dejo el listado de captulos y el enlace.

Introducing Microsoft SQL Server 2008


by Peter DeBetta, Greg Low, and Mark Whitehorn ISBN: 9780735625587 Introducing Microsoft SQL Server 2008: Chapter 1: Security and Administration Chapter 2: Performance Chapter 3: Type System Chapter 4: Programmability

Chapter 5: Storage Chapter 6: Enhancements for High Availability Chapter 7: Business Intelligence Enhancements

Free e-Book: http://csna01.libredigital.com/?urss1q2we6 Nota: Si no los deja descargar el libro, visualizando el libro en el explorador tecleen Ctrl+F y les habilitara el men de Adobe para poder guardar el libro. Etiquetas de Technorati: SQL 2008,Libro Gratis,Free E-Book,Introducing SQL
Comentarios : 2 Comentarios Etiquetas: Free E-Book, Introducing SQL, Libro Categoras : SQL

Gratis, SQL 2008

[SQL 2008] Error al modificar Tablas.


3 04 2009

Saludos amigos, en esta ocasin les dejo la solucin para el problema que se produce cuando intentamos modificar una tabla en SQL 2008. Esto sucede por que por default SQL 2008 hablita una opcin que consiste en bloquear cualquier cambio o modificacin que requiera que la tabla se vuelva a crear.

La solucin consiste en ir al men Herramientas>> Opciones.

En la ventana de opciones seleccionar la opcin Designers >> Diseadores de tablas y bases de datos. y en Opciones de tabla, debe desactivar la casilla: Impedir guardar cambios que requieran volver a crear tablas.

Listo con eso deben de poder realizar las modificacin en las tablas de se base de datos en SQL Server 2008. Espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL 2008,Guardar cambios en tablas,Tablas SQL
Comentarios : 5 Comentarios Etiquetas: Guardar cambios en tablas, SQL 2008, Tablas Categoras : SQL

SQL

[SQL 2008] Error al modificar Tablas.


3 04 2009

Saludos amigos, en esta ocasin les dejo la solucin para el problema que se produce cuando intentamos modificar una tabla en SQL 2008. Esto sucede por que por default SQL 2008 hablita una opcin que consiste en bloquear cualquier cambio o modificacin que requiera que la tabla de vuelva a crear.

La solucin consiste en ir al men Herramientas>> Opciones.

En la ventana de opciones seleccionar la opcin Designers >> Diseadores de tablas y bases de datos. y en Opciones de tabla, debe desactivar la casilla: Impedir guardar cambios que requieran volver a crear tablas.

Listo con eso deben de poder realizar las modificacin en las tablas de se base de datos en SQL Server 2008. Espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL 2008,Guardar cambios en tablas,Tablas SQL
Comentarios : 17 Comentarios Etiquetas: Guardar cambios en tablas, SQL 2008, Tablas Categoras : SQL

SQL

[SQL 2008] Insertar mltiples filas con valores (Nuevo).


31 03 2009

Hola amigos, probablemente alguna vez tratamos de insertar mltiples filas en una tabla, y lo hacamos repitiendo el comando INSERT (copiando y pegando) y solo cambiando el valor de las columnas. En SQL 2008 se puede hacer una mltiple insercin solo escribiendo una vez el INSERT <TABLE> y separando por comas los grupos de valores a insertar, les dejo el ejemplo, que en lo personal se me hace muy prctico e interesante. 1. Creamos una tabla PRB_USUARIOS .
CREATE TABLE dbo.PRB_USUARIOS (Nombre VARCHAR(40), Apellidos VARCHAR(40))

GO

2. Insertamos mltiples filas (Observe la sintaxis).


--Insertando mltiples filas con valores. INSERT dbo.PRB_USUARIOS VALUES ('Ivan','Rangel'), ('Cruz','Trevio'), ('Pepe','El toro'), ('Mara','Flix'), ('Mario','Cantinflas'), ('Pedro','Infante')

Observe que en el comando INSERT: a. No aparece INTO, ya no es necesario en SQL 2008 (es opcional). b. No se repite INSERT, solo se escribe una vez al igual que VALUES. c. Por cada conjunto de valores a insertar tiene que separarlos por coma. 3. Ahora seleccionamos los datos insertados.
SELECT * FROM dbo.PRB_USUARIOS

Me despido y espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL 2008,Insert,Mltiple insert.
Comentarios : 12 Comentarios Etiquetas: INSERT, Mltiple insert., SQL 2008 Categoras : SQL

[SQL 2008] Actualizacin de columnas con tipo de valor largo.


27 03 2009

Saludos, me encontr con una nueva funcionalidad en SQL 2008, esta es la implementacin del comando UPDATE con la clausula .WRITE, para tipo de datos con VALORLARGO, Cabe mencionar que la insercin de tipos de datos de valor-largo es la misma que en otras versiones de SQL server; Ahora SQL Server 2008 para la actualizacin de estos tipos de datos incluye el mtodo .WRITE. Sintaxis: UPDATE <table_or_view_name> SET column_name = .WRITE ( expression , @Offset , @Length ) FROM <table_source> WHERE <search_condition> Parmetros del mtodo .WRITE: Argumento expresin @offset Descripcin La expresin define el fragmento de texto que se coloca en la columna. @Offset determina la posicin inicial de los datos existentes en donde el nuevo texto debe ser colocado. Si @Offset es NULL, significa que la nueva expresin se aadir al final de la columna (omitiendo tambin el segundo parmetro @length). @length determina la longitud de la seccin de la superposicin.

@length

Para que esto quede claro crearemos una tabla la cual tenga un campo de tipo de valor-largo y posteriormente actualizaremos el valor. 1. Creando la tabla:
CREATE TABLE dbo.PRB_Articulo (ArticuloID INT NOT NULL, Contenido VARCHAR(MAX) NOT NULL) GO

2. Insertando un valor:
INSERT dbo.PRB_Articulo (ArticuloID, Contenido) VALUES (1, 'El sqlPsyKrest Blog, Es un blog de apoyo a las personas interesadas en el aprendizaje de SQL con el fin de aumentar y compartir los conocimientos con todos ustedes, atte. su amigo autor.' ) GO

3.Seleccionamos este primer valor del campo Contenido:

4. Actualicemos agregando ms texto al final del campo Contenido utilizando el mtodo .WRITE:
UPDATE dbo.PRB_Articulo SET Contenido .WRITE (' Como ven ahora podemos agregar ms lineas a nuestros textos largos con una simple actualizacin, interesante no creen?', NULL, NULL) WHERE ArticuloID = 1 GO

5. Seleccionamos el campo Contenido y veamos que la parte marcada en amarillo es la que se actualizo y se aadi al final del texto.

6. Ahora vamos a reemplazar la palabra autor la cual esta en el texto de la columna Contenido, se sustituir por mi nombre: Ivn Rangel Cuadros.
UPDATE dbo.PRB_Articulo SET Contenido .WRITE('Ivn Rangel Cuadros', 182, 5) WHERE ArticuloID = 1 GO

7. Mostramos el resultado final de la sustitucin por medio de la actualizacin con el mtodo .WRITE.

Espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL 2008,Mtodo WRITE,UPDATE WRITE,Clausula WRITE,Valores Largos SQL
Comentarios : Deja un

Comentario

Etiquetas: Clausula

WRITE, Mtodo WRITE, SQL 2008, UPDATE - WRITE, Valores

Largos SQL Categoras : SQL

[SQL 2008] Crear una lista delimitada por comas usando SELECT.
26 03 2009

Saludos amigos, una ventaja de SQL 2008 es que nos permite hacer el uso de una sobrecarga del operador =, para poder asignar mltiples valores a una variable TSQL como: SELECT @Var = @Var La instruccin anterior en SQL 2005 no marca error pero solo nos guarda el ultimo valor asignado. Les dejo un ejemplo que aseguro que a muchos nos ser de gran utilidad. Ha!!! se me olvidaba que en SQL 2008 podemos asignar un valor directo a una variable cuando la declaramos ahorrndonos el SET. DECLARE @txt AS VARCHAR(250) = Tambin es necesario mencionar que inicializamos la variable con un valor vaco ya que no es correcto concatenar valores NULL a una cadena. 1. Creamos la tabla de ejemplo.
CREATE TABLE dbo.PRB_USUARIOS (Nombre VARCHAR(40), Apellidos VARCHAR(40)) GO

2. Insertamos algunos datos.


INSERT INSERT INSERT INSERT INSERT INSERT GO INTO INTO INTO INTO INTO INTO dbo.PRB_USUARIOS dbo.PRB_USUARIOS dbo.PRB_USUARIOS dbo.PRB_USUARIOS dbo.PRB_USUARIOS dbo.PRB_USUARIOS VALUES VALUES VALUES VALUES VALUES VALUES ('Ivan','Rangel') ('Claudia','Perez') ('Maria','Cuadros') ('Mariana','Rangel') ('Mario','Cantinflas') ('Pedro','Infante')

3. Ejecutamos la consulta de concatenacin (Muy fcil

).

DECLARE @txt AS VARCHAR(250) = '' SELECT @txt = @txt + Nombre + ' ' + Apellidos + ', ' FROM dbo.PRB_USUARIOS

SELECT @txt AS txtConcatenado GO

Y nos da el siguiente resultado.

Espero les sea de ayuda, dejen comentarios!!!. Etiquetas de Technorati: SQL 2008,Concatenar String SQL,Texto separado por comas,SELECT para concatenar
Comentarios : 5 Comentarios Etiquetas: Concatenar String SQL, SELECT

para concatenar, SQL 2008, Texto separado por

comas
Categoras : SQL

[SQL(2005/2008)-UNPIVOT] Normalizacin de Datos con UNPIVOT.


26 03 2009

Saludos nuevamente amigos, leyendo nuevamente sobre TSQL, me encontr el tema de Normalizacin de datos con la clausula UNPIVOT. El comando UNPIVOT hace lo contrario de PIVOT cambiando columnas en filas, utilizando la misma sintaxis que PIVOT. Nota: Este ejemplo funciona en SQL 2008 y 2005. Este ejemplo demuestra cmo UNPIVOT se puede utilizar para eliminar la repeticin de grupos de columna, a menudo visto en tablas no normalizadas. 1. Creamos una tabla no normalizada con la repeticin de la columna de Idioma:
CREATE TABLE dbo.TraductorIdioma (IdTraductor INT NOT NULL, Idioma1 VARCHAR(50), Idioma2 VARCHAR(50), Idioma3 VARCHAR(50)) GO

2. Insertamos datos en la tabla.


INSERT dbo.TraductorIdioma(IdTraductor, Idioma1, Idioma2, Idioma3) VALUES( 1, 'Espaol', 'Ingls', 'Alemn')

INSERT dbo.TraductorIdioma(IdTraductor, Idioma1, Idioma2, Idioma3) VALUES( 2, 'Espaol', 'Portugus', 'Francs') INSERT dbo.TraductorIdioma(IdTraductor, Idioma1, Idioma2, Idioma3) VALUES( 3, 'Espaol', NULL, NULL) GO

3. Realizamos un SELECT normal (Resultado no normalizado).

4. Por ltimo aplicamos un UNPIVOT para normalizar la informacin en nuestro SELECT.


SELECT IdTraductor, TipoIdioma, Idioma FROM (SELECT IdTraductor, Idioma1, Idioma2, Idioma3 FROM dbo.TraductorIdioma) c UNPIVOT (Idioma FOR TipoIdioma IN ([Idioma1], [Idioma2], [Idioma3]) ) AS p

Resultado (Normalizado).

Espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL 2005,SQL 2008,UNPIVOT
Comentarios : 4 Comentarios Etiquetas: SQL 2005, SQL 2008, UNPIVOT Categoras : SQL

[SQL-Select] Porque no utilizar SELECT *.


25 03 2009

Saludos amigos leyendo un libro de SQL 2008, me encontr con un prrafo muy interesante que creo les ser de ayuda a las personas que empiezan con el desarrollo en TSQL, considero que no importa si es SQL 2000, 2005 o 2008. El smbolo asterisco (*) devuelve todas las columnas para cada fila de tabla o vista en la que se consulta. Recordemos que, como buena prctica, es mejor hacer referencia explcita a las columnas que deseemos recuperar en lugar de utilizar SELECT *. Referencia explcita.
SELECT Id, Nombre, Apellidos FROM PRB_Usuario

Si desarrolla una aplicacin que usa SELECT *, la aplicacin pueden esperar las mismas columnas (en el mismo orden) de la consulta. Si ms adelante se agrega una nueva columna a la tabla o vista, o si se reordenan las columnas de la tabla, se puede romper el llamando a la aplicacin, ya que la nueva columna puede provocar un resultado inesperado. Usar SELECT * tambin puede repercutir negativamente en: 1. El rendimiento, ya que la consulta puede devolver ms datos de los que se necesitan. 2. El aumento del tamao del conjunto de resultados y operaciones de recuperacin de datos en la instancia de SQL Server. 3. Para aplicaciones que requieren miles de transacciones por segundo, el nmero de columnas devueltas en el resultado puede tener un fuerte impacto. En resumen use mejor: SELECT campo1, campo2, campo3 FROM TUTABLA Evite usar: SELECT * FROM TUTABLA. Espero les sea de ayuda, dejen comentarios. Etiquetas de Technorati: SQL,Select *

Comentarios : 2 Comentarios Etiquetas: SELECT, SQL Categoras : SQL

[SQL CREATE] CREAR DATABASE-LOGIN-USER.


25 03 2009

Saludos amigos, a veces al estar administrando bases de datos o crear nuevas realizamos tareas repetitivas, les comparto un script el cual nos crea una Base de Datos, pero eso no es todo tambin se creara un Inicio de sesin (Login) y un usuario (User) en la base de datos que se cree, todo esto para no estar usando los Wizard y perder un poco de tiempo, no se tardan ni 2 minutos . Aun no existe la BD:

Ejecutamos el Script:
USE master GO --Si existe la BD la eliminamos. IF EXISTS( SELECT Name FROM sys.sysdatabases WHERE Name = 'BDPrueba' ) DROP DATABASE BDPrueba GO --Creando la BD. CREATE DATABASE BDPrueba GO --Si existe el Inicio de sesin lo eliminamos. IF EXISTS( SELECT name FROM sys.syslogins WHERE name = 'UserPrueba' ) DROP LOGIN UserPrueba GO --Creando el inicio de sesin. CREATE LOGIN UserPrueba WITH PASSWORD = '987654', CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF GO --Usamos la BD que creamos 'BDPrueba' USE BDPrueba GO --Creamos el usuario a la BD, el usuario debe de ir asociado a un inicio de sesin. CREATE USER UserPrueba FOR LOGIN UserPrueba GO --Le agregamos un Rol al Usuario. sp_addrolemember 'db_owner', 'UserPrueba' GO

--Ahora ya pueden conectarse a la BD con la sesin creada y hacer lo que quieran!!!.

Ahora ya existe la BD:

Solo nos queda conectarnos con el Inicio de sesin que creamos:

Listo, espero les sea de ayuda, dejen comentarios!.

Etiquetas de Technorati: CREATE DATABASE,CREATE LOGIN,CREATE USER,SQL 2005.


Comentarios : 1 comentario Etiquetas: CREATE DATABASE, CREATE Categoras : SQL

LOGIN, CREATE USER, SQL 2005

[SQL-LOG] Reducir el LOG de una Base de Datos.


23 03 2009

Saludos amigos despus de un tiempo de no postear nada, les dejo un script que reduce el log de una base de datos. Supongamos que el siguiente archivo LOG pesa demasiado y lo queremos reducir.

Como primer paso y previniendo cualquier error que se pueda generar durante la ejecucin de la reduccin del LOG tendremos que hacer un respaldo de la BD.

USE master GO BACKUP DATABASE prueba TO DISK = N'C:\RespaldosBD\Prueba_Full.BAK' GO BEGIN TRY DECLARE @backupSetId AS INT SELECT @backupSetId = position FROM msdb..backupset WHERE database_name=N'Prueba' AND backup_set_id=(SELECT MAX(backup_set_id) FROM msdb..backupset WHERE database_name=N'Prueba' ) IF @backupSetId IS NULL BEGIN

RAISERROR(N'Fallo la verificacin. La informacin de reapaldo para la base de datos, no se encontro.', 16, 1) END RESTORE VERIFYONLY FROM DISK = N'C:\RespaldosBD\Prueba_Full.BAK' WITH FILE = @backupSetId PRINT 'La verificacin se realizo correctamente, el respaldo de la base de datos esta listo para utilizarse.' END TRY BEGIN CATCH PRINT ERROR_MESSAGE() PRINT ERROR_LINE() PRINT ERROR_NUMBER() END CATCH GO

Si todo sali bien tendremos nuestro respaldo en la ubicacin indicada en el script anterior.

Ahora, respaldamos el archivo de LOG y le aplicamos un SHRINKFILE. El SHRINKFILE Reduce el tamao del archivo de datos o de registro para la base de datos actual, o vaca un archivo moviendo los datos del archivo especificado a otros archivos del mismo grupo de archivos, permitiendo quitar el archivo de la base de datos. Puede reducir un archivo a un tamao menor que el tamao especificado cuando se cre. As se restablece el tamao mnimo de archivo al valor nuevo. @http://msdn.microsoft.com/es-es/library/ms189493.aspx El CHECKPOINT Escribe en disco todas las pginas desfasadas de la base de datos actual. Las pginas desfasadas son pginas de datos que se han incluido en el cach la memoria y se han modificado, pero todava no se han guardado en el disco. Los puntos de comprobacin permiten ahorrar tiempo en una recuperacin posterior al crear un punto en el que se garantiza que todas las pginas desfasadas se hayan escrito en el disco. El script final:
USE Prueba CHECKPOINT

BACKUP LOG Prueba TO DISK = 'C:\RespaldosBD\Prueba_Log.trn' DBCC SHRINKFILE (N'Prueba_Log' , 0, TRUNCATEONLY) GO

Si todo se ejecuto correctamente tendremos el archivo LOG reducido Truncado (para este caso). Resultado:

Me hubiera gustado hacer el ejemplo con LOG ms grande, pero al momento solo cuento con este, aun as debe funcionar de la misma manera. Nota: Me paso que al ejecutar el SHRINKFILE a una base de datos desde un acceso remoto, me deca que el archivo LOG no exista aunque fsicamente ah estuviera, despus de probar un rato, logre que funcionara, en lugar de utilizar el nombre del archivo LOG, utilice el file_id y listo todo se resolvi. Como saber el File_id? Si ejecutamos el siguiente query obtendremos los siguientes resultados.
USE Prueba SELECT * FROM SYS.DATABASE_FILES

Ahora que ya sabes el file_id lo usamos en el SHRINKFILE:


USE Prueba

CHECKPOINT BACKUP LOG Prueba TO DISK = 'C:\RespaldosBD\Prueba_Log.trn' DBCC SHRINKFILE (2 , 0, TRUNCATEONLY) GO

Listo, con eso se debe reducir el archivo LOG de una BD. Espero les sea de ayuda, espero comentarios!!!. Etiquetas de Technorati: SQL,SHRINKFILE,CHECKPOINT,SQL LOG,REDUCIR LOG,TRUNCATE LOG
Comentarios : 11 Comentarios Etiquetas: CHECKPOINT, REDUCIR

LOG, SHRINKFILE, SQL, SQL LOG, TRUNCATE

LOG
Categoras : SQL

[SQL RANDOM] RAND() Generar cadenas aleatorias.


25 02 2009

Saludos nuevamente amigos, supongo que en varias ocasiones han intentado generar cadenas aleatorias en SQL, ya sea que contengan caracteres, nmeros o ambos, bueno pues me encontr algunos ejemplos de como hacer una funcin en SQL para lograr nuestro objetivo de la forma ms eficiente. Les dejo un script de una funcin escalar la cual recibe dos parmetros, uno para el tamao de la cadena aleatoria y el segundo para seleccionar si se requieren nmeros, letras o ambos. Vale la pena comentarles que se requiere crear una vista VIEW para poder hacer uso de la funcin RAND(), ya que no es valido su uso dentro de una funcin escalar, si lo intentan hacer las marcara el siguiente error.

Para que no suceda esto crearemos una vista:


CREATE VIEW vwRandom AS SELECT RAND() as Rnd

GO

Aqu esta el script de la funcin (vean la parte donde se utiliza la vista vwRandom para no generar un error):
CREATE FUNCTION fnCustomPass ( @size AS INT, --Tamao de la cadena aleatoria @op AS VARCHAR(2) --Opcin para letras(ABC..), numeros(123...) o ambos. ) RETURNS VARCHAR(62) AS BEGIN DECLARE @chars AS VARCHAR(52), @numbers AS VARCHAR(10), @strChars AS VARCHAR(62), @strPass AS VARCHAR(62), @index AS INT, @cont AS INT SET SET SET SET @strPass = '' @strChars = '' @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' @numbers = '0123456789' WHEN 'C' THEN @chars --Letras 'N' THEN @numbers --Nmeros 'CN' THEN @chars + @numbers --Ambos (Letras '------'

SET @strChars = CASE @op WHEN WHEN y Nmeros) ELSE END

SET @cont = 0 WHILE @cont < @size BEGIN SET @index = ceiling( ( SELECT rnd FROM vwRandom ) * (len(@strChars)))--Uso de la vista para el Rand() y no generar error. SET @strPass = @strPass + substring(@strChars, @index, 1) SET @cont = @cont + 1 END RETURN @strPass END GO

Ahora solo nos falta ejecutar la funcin y ver cuales son los resultados que nos genera:
SELECT dbo.fnCustomPass(15,'C') AS 'Cadena aleatoria','Solo Letras' AS Contiene --Cadena aleatoria que contiene Letras. UNION ALL

SELECT dbo.fnCustomPass(15,'N'),'Solo Nmeros' --Cadena aleatoria que contiene Nmeros. UNION ALL SELECT dbo.fnCustomPass(15,'CN'), 'Letras y Nmeros'--Cadena aleatoria que contiene Letras y Nmeros.

Resultado:

Espero les sea de ayuda, dejen comentarios o escriban si necesitan ayuda sobre algn tema. Etiquetas de Technorati: SQL RAND(),RAND Function,Funcin Rand SQL 2005,Cadenas aleatorias SQL
Comentarios : 2 Comentarios Etiquetas: Cadenas aleatorias SQL, Funcin Categoras : SQL

Rand SQL 2005, RAND Function, SQL RAND()

[SQL DATE FUNCTIONS] DATENAME


24 02 2009

Saludos amigos ya que estoy recordando lo de las fechas aqu les dejo otro ejemplo de funcin para el manejo de fechas con DATENAME. Con esta funcin podemos obtener el nombre de ciertas partes que forman una fecha, como lo son el mes, el da de la semana, etc. Sintaxis: DATENAME ( datepart ,date ). Consulta:
--DATENAME ( datepart , date ) DECLARE @fecha AS DATETIME SET @fecha = '24/02/2009 09:19:04.267' SELECT DATENAME(day, @fecha) AS 'nombreFecha', 'Da' AS 'Parte' UNION ALL SELECT DATENAME(month, @fecha),'Mes' UNION ALL SELECT DATENAME(year, @fecha),'Ao' UNION ALL SELECT DATENAME(dayofyear, @fecha),'Da del ao' UNION ALL SELECT DATENAME(week, @fecha),'Semana' UNION ALL

SELECT DATENAME(weekday, @fecha),'Da de la semana' UNION ALL SELECT DATENAME(hour, @fecha),'Hora' UNION ALL SELECT DATENAME(minute, @fecha),'Minuto' UNION ALL SELECT DATENAME(second, @fecha),'Segundo' UNION ALL SELECT DATENAME(millisecond, @fecha),'Milisegundo'

Resultado:

les dejo otro ejemplo usando la funcin DATENAME:


SELECT 'Hoy es ' + DATENAME(weekday, GETDATE()) + ' ' + DATENAME(day, GETDATE()) + ' de ' + DATENAME(month, GETDATE()) + ' ' + DATENAME(year, GETDATE())

La consulta anterior da como resultado:

Les dejo una tabla con abreviaturas para hacer referencia a las partes de la fecha con DATENAME.
Parte de la fecha year quarter month dayofyear day week weekday Abreviaturas yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw

hour minute second millisecond

hh mi, n ss, s ms

@http://msdn.microsoft.com/es-es/library/ms174395(SQL.90).aspx Espero les sirva, dejen comentarios!!!. Etiquetas de Technorati: SQL DATE,Fechas SQL,DATENAME,Funciones de fecha SQL,date functions.
Comentarios : Deja un Comentario Etiquetas: date functions, DATENAME, Fechas Categoras : SQL

SQL, funciones de fecha SQL, SQL DATE

[SQL DATE FUNCTIONS] DATEPART.


24 02 2009

Saludos amigos en esta ocasin les traigo un ejemplo del manejo de fecha con la funcin DATEPART de SQL 2005, con la cual podemos obtener el da, mes, ao, da de la semana, da del ao, horas, minutos, segundos, etc. A continuacin les dejo una consulta con la cual podrn ver el resultado de la ejecucin de DATEPART. Sintaxis: DATEPART ( datepart , date ). Consulta:
--DATEPART ( datepart , date ) DECLARE @fecha AS DATETIME SET @fecha = '24/02/2009 09:19:04.267' SELECT DATEPART(day, @fecha) AS 'datepart SQL', 'da' AS '#' UNION ALL SELECT DATEPART(month, @fecha) ,'mes' UNION ALL SELECT DATEPART(year, @fecha) ,'ao' UNION ALL SELECT DATEPART(hour, @fecha) ,'horas' UNION ALL SELECT DATEPART(minute, @fecha) ,'minutos' UNION ALL SELECT DATEPART(second, @fecha) ,'segundos' UNION ALL SELECT DATEPART(millisecond, @fecha) ,'milisegundos'

UNION ALL SELECT DATEPART(dayofyear, @fecha) ,'da del ao' UNION ALL SELECT DATEPART(week, @fecha) ,'semana' UNION ALL SELECT DATEPART(weekday, @fecha) ,'da de la semana'

Resultado:

Por ltimo les dejo una tabla con abreviaturas para hacer referencia a las partes de fecha.
Columna1 Parte de la fecha year quarter month dayofyear day week weekday hour minute second millisecond Columna2 Abreviaturas yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw hh mi, n ss, s ms

@http://msdn.microsoft.com/es-es/library/ms174420(SQL.90).aspx Espero les sirva, dejen comentarios!!! Etiquetas de Technorati: SQL DATE,SQL,date functions,datepart,funciones de fecha SQL
Comentarios : 1

comentario

Etiquetas: date functions, datepart, funciones Categoras : SQL

de fecha SQL, SQL, SQL DATE

[SQL] CIFRAR(encriptar) / DECIFRAR(desencriptar) Campos en SQL2005


17 02 2009

Saludos amigos, en esta ocasin prepare un ejemplo de como en cifrar un campo en una tabla en SQL 2005. Para hacer esto es usando la funcin: ENCRYPTBYPASSPHRASE: Para cifrar y DECRYPTBYPASSPHRASE: Para descifrar. Como primer paso tienen que preparar el campo de la base de datos para que sea de tipo VARBINARY.

Como segundo paso creamos una funcin escalar en SQL 2005 para poder colocar el valor cifrado. Hagan clic derecho sobre la opcin Funciones con valores escalares y seleccionen Nueva funcin con valores escalares.

La funcin quedara de la siguiente manera.


CREATE FUNCTION [dbo].[fnColocaClave]

( @clave VARCHAR(25) ) RETURNS VarBinary(8000) AS BEGIN DECLARE @pass AS VarBinary(8000) ----------------------------------------------------------------------SET @pass = ENCRYPTBYPASSPHRASE('dbCurso09',@clave)--dbCurso09 es la llave para cifrar el campo. ----------------------------------------------------------------------RETURN @pass END

Ahora ejecutamos la funcin al insertar un nuevo campo a una tabla.


--El campo a cifrar es contrasena y se guarda el valor sqlPsyKrest. INSERT INTO USUARIO_CUR (nombre, apellidos, email, contrasena, activo, fecha_add) VALUES('Ivan','Rangel','ir@email.com',dbo.fnColocaClave('sqlPsyKrest'),1, GETDATE())

Si consultamos el valor de nuestro campo seria:


SELECT id, nombre, apellidos, email, contrasena FROM USUARIO_CUR

Resultado:

Listo ya nos devuelve el valor d nuestro campo de manera cifrada, ahora el siguiente paso es crear la funcin para leer el campo cifrado.
CREATE FUNCTION fnLeeClave ( @clave VARBINARY(8000) ) RETURNS VARCHAR(25) AS BEGIN DECLARE @pass AS VARCHAR(25) -----------------------------------------------------------------------

--Se descifra el campo aplicandole la misma llave con la que se cifro dbCurso09 SET @pass = DECRYPTBYPASSPHRASE('dbCurso09',@clave) ----------------------------------------------------------------------RETURN @pass END GO

Por ultimo consultamos la tabla aplicndole al campo cifrado la funcin para leer el campo cifrado.
SELECT id, nombre, apellidos, email, dbo.fnLeeClave(contrasena) FROM USUARIO_CUR

Y el resultado seria el siguiente:

Espero les sea de ayuda!!!.

Apyame votando aqu: http://blogit.ms en la categora SQL Server. Los pasos para votar estn aqu te llevara 3 min: Clic Aqu.

Etiquetas de Technorati: ENCRYPT,DECRYPT,Encriptar,Desencriptar,Cifrar campos,SQL 2005.


Comentarios : 21 Comentarios Etiquetas: Cifrar campos, DECRYPT, Desencriptar, Encriptar, ENCRYPT, SQL 2005 Categoras : SQL

[SQL Dynamic] Consultas dinmicas con SQL 2005.


7 02 2009

Hola amigos, en esta ocasin colocare un ejemplo de la realizacin de consultas SQL de manera dinmica, para esto utilizaremos el procedimiento almacenado de sistema sp_executesql, el cual nos permite ejecutar cadenas de tipo cadena como comandos SQL. Sintaxis: EXEC sp_executesql <Cadena de comando SQL a ejecutar> El siguiente ejemplo realiza un select a una tabla de forma dinmica.
DECLARE @strSql NVARCHAR(255) --Variable de tipo cadena que almacenara el comando SQL. SELECT @strSql=N'SELECT * FROM dbo.USUARIO_SYS';--Asignamos la consulta a la variable. EXEC sp_executesql @strSql--Ejecutamos la cadena como comando

Y nos da como resultado:

Otra de la ventajas de sp_execsql es que nos permite usar parmetros en nuestras consultas: Ahora seleccionaremos los usuarios que se encuentren con una fecha de alta entre el 7 y 9 de febrero.
DECLARE @sql nvarchar(255) Select @sql=N'SELECT * FROM dbo.USUARIO_SYS WHERE AND @hasta'; exec sp_executesql @sql, N'@de datetime,@hasta datetime','07/02/2009','09/02/2009' fecha_add between @de

Resultado:

Como se dieron cuenta se omiti la primera fila ya que no cumple con el criterio de fechas de la bsqueda, ahora ya saben que al utilizar el TSQL dinmico tambin pueden hacer uso de parmetros en sus consultas. Espero les sirva. Etiquetas de Technorati: sp_executesql,SQL dinmico,SQL 2005,TSQL Dinmico.
Comentarios : Deja un Comentario Etiquetas: sp_executesql, SQL 2005, SQL dinmico, TSQL Dinmico. Categoras : SQL

[BackUp SQL] Crear respaldos de BD con TSQL.


6 02 2009

Saludos amigos aqu les dejo un script de TSQL que sirve para realizar respaldos completos de base de datos y posteriormente verificar que el respaldo este creado de manera correcta para su futura implementacin. 1. Script para generar el respaldo.
BACKUP DATABASE [tubasededatos]--BD que se va a respaldar. TO DISK = N'C:\RespaldosDB\tubasededatos_full.BAK'--Ruta a donde se va a generar el respaldo. WITH DESCRIPTION = N'Respaldo completo de la base de datos tubasededatos', --Descripcin del respaldo. NOFORMAT, INIT, NAME = N'tubasededatos_respaldo_completo', --Alias del respaldo a nivel logico. SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM

2. Ahora verificaremos que el respaldo se haya generado correctamente y este listo para su utilizacin.
BEGIN TRY DECLARE @backupSetId AS INT --Seleccionamos el identificador del respaldo de la base de datos.

SELECT @backupSetId = position FROM msdb..backupset WHERE database_name=N'tubasededatos' AND backup_set_id=(SELECT MAX(backup_set_id) FROM msdb..backupset WHERE database_name=N'tubasededatos' ) --Si no regresa ningun identificador generamos un error. IF @backupSetId IS NULL BEGIN RAISERROR(N'Fallo la verificacin. La informacin de reapaldo para la base de datos ''tubasededatos'' no se encontro.', 16, 1) END --Si el identificador es valido, verificamos el respaldo creado. RESTORE VERIFYONLY FROM DISK = N'C:\RespaldosDB\tubasededatos_full.BAK' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND PRINT 'La verificacin se realizo correctamente, el respaldo de la base de datos ''tubasededatos'' esta listo para utilizarse' END TRY BEGIN CATCH--En caso de error, mostramos el mensaje, lnea y nmero de error. PRINT ERROR_MESSAGE() PRINT ERROR_LINE() PRINT ERROR_NUMBER() END CATCH

Ya solo les queda verificar la ruta fsica del respaldo y listo.

Espero les sea de ayuda, dejen comentarios!!! Etiquetas de Technorati: SQL Backup,TSQL Backup,Respaldos,Copias de seguridad.

Comentarios : 2 Comentarios Etiquetas: Copias de seguridad., Respaldos, SQL Backup, TSQL Backup Categoras : SQL

[SQL] Reiniciar una llave primaria.


6 02 2009

Saludos amigos, aqu les dejo el comando para reiniciar una llave primaria en SQL 2005. Supongamos que tenemos una tabla de la cual queremos eliminar todos los registros y que en el prximo insert el valor de la llave primaria sea 1. Tenemos la siguiente tabla:

Primero borramos todos los registros he inmediatamente insertamos y seleccionamos, observen el consecutivo de la lleva primaria.
DELETE FROM dbo.USUARIO_SYS INSERT INTO dbo.USUARIO_SYS VALUES('Ivan', 'Rangel','ivan.tangel.c@gmail.com','trew01', GETDATE(),GETDATE()) SELECT * FROM dbo.USUARIO_SYS

Ahora antes de ejecutar la instruccin para reiniciar la lleva primaria tenemos que eliminar todos los registros.
DELETE FROM dbo.USUARIO_SYS --Eliminamos todos los registros. DBCC CHECKIDENT('dbo.USUARIO_SYS', RESEED, 0)--Reinicia la lleva primaria. INSERT INTO dbo.USUARIO_SYS VALUES('Ivan', 'Rangel','ivan.tangel.c@gmail.com','trew01', GETDATE(),GETDATE())-Insertamos SELECT * FROM dbo.USUARIO_SYS--Seleccionemos y observemos el id

Espero les sea de ayuda. Etiquetas de Technorati: SQL,Reiniciar llave primaria,DBCC,CHECKIDENT

Comentarios : 1 comentario Etiquetas: CHECKIDENT, DBCC, Reiniciar llave primaria, SQL Categoras : SQL

[SQL] Instrucciones bsicas de SQL 2005.


30 01 2009

Hola amigos, en esta ocasin este post va dedicado a las personas que se inician en las consultas de base de datos y sus operaciones bsicas como lo son el INSERT, UPDATE, DELETE y SELECT. Colocare un ejemplo de cada instruccin: INSERT:
INSERT INTO <TABLA> (<CAMPOS A INSERTAR>) VALUES (<VALORES A INSERTAR>) INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add) VALUES ('JOSE','PEREZ','mail@mail.com','a47825',GETDATE() )

SELECT: SELECT <CAMPOS> FROM <TABLA> WHERE <CONDICIONES> ORDER BY <CRITERIOS DE ORDENACION>
SELECT id, nombre, apellidos, email, pass, fecha_add FROM dbo.USUARIO_SYS WHERE id < 12 ORDER BY nombre, apellidos

UPDATE: UPDATE <TABLA> SET <CAMPO N> = <VALOR> WHERE <CONDICION DE ACTUALIZACION>
UPDATE dbo.USUARIO_SYS SET nombre = 'FLORIPONDIO', apellidos = 'MADALENO' WHERE id = 12

DELETE: DELETE FROM <TABLA> WHERE <CONDICION DE ELIMINACION>


DELETE FROM dbo.USUARIO_SYS WHERE id = 12

Espero les sea de ayuda, dejen comentarios!!!

Etiquetas de Technorati: INSERT,SELECT,UPDATE,DELETE,SQL OPERACIONES BASICAS,COMANDOS SQL BASICOS,SQL,SQL 2005,INSTRUCCIONES SQL


Comentarios : 2 Comentarios Etiquetas: COMANDOS SQL BASICOS, DELETE, INSERT, INSTRUCCIONES SELECT, SQL, SQL 2005, SQL OPERACIONES BASICAS, UPDATE Categoras : SQL

SQL,

[SQL Mail TSQL] Envi de correos desde SQL 2005 parte 2.


28 01 2009

Saludos nuevamente amigos, si leyeron el post anterior y todo les funciono correctamente, les ser sumamente sencillo realizar el siguiente script TSQL, lo que haremos es enviar correos electrnicos con cdigo TSQL desde un perfil ya configurado en el post anterior, a continuacin les coloco el cdigo:
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'sqlPsyPerfil',--Perfil de correo configurado. @recipients = 'ivan.rangel.c@gmail.com', -- A quien se va enviar el correo. @body = 'Este correo es enviado desde SQL Server 2005 con cdigo TSQL por sqlPsyKrest Blog',--Cuerpo del correo. @subject = 'Correo desde TSQL - MS SQL 2005 sqlPsyKrest.',--Asunto del correo. @importance = 'High' --[Low | Normal| High] Prioridad del correo.

En el script anterior se hizo uso del procedimiento almacenado de Sistema sp_send_dbmail, su funcin es la de enviar mensajes de correo electrnico desde la base de datos, para ejecutarlo este necesita una serie de parmetros, los cuales no todos son necesarios, los que en este caso se utilizan son: @profile_name: Perfil de correo de donde se enviara el correo. @recipients: Destinatarios del correo uno o ms. @body: Cuerpo del correo, por default es de tipo texto. @subject: Asunto del correo. @importance = Prioridad del envo del correo.

Dependiendo de la carga que tenga su servidor y de la prioridad configurada en el envi del correo, el correo llegara o se tardara mas tiempo en ser enviado, si no existieron problemas, el correo llegara correctamente a su destino.

Ahora enviaremos un correo electrnico con TSQL a partir de una consulta a una Tabla formateada en Tabla HTML.
DECLARE @tableHTML NVARCHAR(MAX);

SET @tableHTML = N'<table border="1" cellpadding="5" cellspacing="0">'+ N'<thead>'+ N'<tr style=''background: Navy; color: White;font-weight: bold;''>'+ N'<th>Id</th>'+ N'<th>Nombre</th>'+ N'<th>Apellidos</th>'+ N'<th>Email</th>'+ N'<th>Pass</th>'+ N'</tr>'+ N'</thead>'+ N'<tbody>'+ CAST ( ( SELECT td = id, '', td = nombre, '', td = apellidos, '', td = email, '', td = pass, '' FROM dbo.USUARIO_SYS ORDER BY nombre, apellidos FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) + N'</tbody>'+ N'</table>' EXEC msdb.dbo.sp_send_dbmail @profile_name = 'sqlPsyPerfil', @recipients = 'ivan.rangel.c@gmail.com', @subject = 'Correo desde TSQL 2005 con HTML', @body = @tableHTML, @body_format = 'HTML', @importance = 'High'

Como primer paso declaramos un variable @tablaHTML la cual contendra el cuerpo del mensaje en formato de tabla HTML con ayuda de la clausula FOR XML vista ya en posts anteriores, lo que hace la consulta es tranformar los datos de consulta en texto con caractersticas de lenguaje de marcado HTML. Por ultimo solo nos queda asignar la variable @tablaHTML como nuestro contenido del mensaje, he indicar que el formato del mensaje ser HTML con @body_format =

HTML, los demas parametros ya sabemos como configurarlos, y de nuevo solo nos queda esperar a que llegue el correo a su destino como lo muestra la siguiente imagen.

Espero les sea de ayuda. Dejen Comentarios!!! Etiquetas de Technorati: SQL Mail,TSQL Mail,Envio de correos SQL,Correos de prueba desde SQL,correos HTML con SQL 2005,sp_send_dbmail
Comentarios : 28 Comentarios Etiquetas: Correos de prueba desde SQL., correos SQL, sp_send_dbmail, SQL Mail, TSQL Mail Categoras : SQL

HTML con SQL 2005, Envio de correos

[SQL Mail] Envi de Correos desde SQL 2005.


28 01 2009

Saludos amigos, en esta ocasin explicare un breve ejemplo de como configurar la Superficie de SQL Server para el envi de correos electrnicos. Como primer paso tienen que ir a la opcin del men de Microsoft SQL Server 2005 >> Herramientas de configuracin >> Configuracin de superficie de SQL server.

Aparecer una ventana de configuracin de la cual deben de dar clic en la opcin de Configuracin de superficie para caractersticas.

En la ventana que se abre, del rbol de opciones, en el nodo Motor de base de datos>> Correo electrnico de base de datos, deben de activar la casilla que dice: Habilitar procedimientos almacenados de correo electrnico de base de datos y dar clic en el botn aplicar.

La otra opcin a configurar es la de SQL Mail al mismo nivel del rbol de opciones, y activar la casilla que dice: Habilitar procedimientos almacenados de SQL Mail, dar clic en el botn aplicar y posteriormente en aceptar.

Hasta este momento estn habilitadas las opciones de correo electrnico, falta configurar una cuenta y un perfil, el cual servir para enviar los correos electrnicos. Antes de comenzar necesitas los siguientes datos que son los mismos de una cuenta que se configura en Microsoft Outlook. 1. Direccin de correo electrnico. 2. Servidor de correo saliente SMTP. Nota: Si tu servidor de salida requiere autenticacin necesitas anexar:

1. Nombre de usuario (SMTP). 2. Contrasea (SMTP). Ya que tienes a la mano esos datos, te vas al Explorador de objetos de SQL Server 2005 y en la opcin del rbol de opciones Administracin >> Correo electrnico de base de datos haces clic derecho y del men contextual seleccionas la opcin Configurar correo electrnico de base de datos.

En el asistente de configuracin de correo, seleccionen la casilla de Instalar Correo electrnico de base de datos y den clic en siguiente.

Les aparecer una ventana para crear un perfil de correo, escriban un nombre de perfil y una descripcin.

ahora tendremos que crear una cuenta SMTP al perfil, hacemos clic en el botn Agregar, Aparecer una ventana para agregar una nueva cuenta de correo, escriban un nombre de cuenta, descripcin, la direccin de correo de la que se enviaran los correos, un nombre a mostrar, el nombre del servidor de salida, y si lo requiere, los datos de autenticacin SMTP con el nombre de usuario y contrasea, den clic en el botn Aceptar y posteriormente en el botn siguiente .

Aparecer una ventana de Administrar la seguridad del perfil, de la lista de perfiles seleccionen el que acabamos de crear y damos clic en el botn Siguiente.

En la ventana de Configurar parmetros del sistema hacemos clic en Siguiente. En la ventana de Finalizacin del asistente damos clic en Finalizar. Si todos los datos fueron correctos, aparecer una ventana de Configurando que indicara que la configuracin de correo se ejecuto correctamente, no debe de aparecer ningn error o advertencia y por ultimo damos clic en el bot Cerrar.

Ahora solo nos queda enviar un correo electrnico de prueba, nos vamos al explorador de objetos en el nodo Administracin >> Correo electrnico de base da datos, damos clic derecho y seleccionamos la opcin Enviar correo electrnico de prueba.

Aparecer una pequea ventana donde seleccionaremos el perfil que creamos hace algunos pasos, escribiremos la direccin de correo a la que queremos enviar, un asunto y cuerpo del mensaje, damos clic en el botn Enviar correo electrnico.

Ahora solo nos queda esperar que haya llegado el correo electrnico y si es as listo!!! ya tenemos todo funcionando para el envi de Correos desde SQL Server 2005.

En el prximo Post enviaremos correos desde cdigo TSQL utilizando el perfil que acabamos de crear. Espero les sea de ayuda, Dejen cometarios!!! Etiquetas de Technorati: SQL Mail,Correo electrnico desde SQL Server,Emails desde SQL 2005,SQL 2005,Correos de prueba desde SQL.
Comentarios : 26 Comentarios Etiquetas: Correo electrnico desde SQL Server, Correos desde SQL 2005, SQL 2005, SQL Mail Categoras : SQL

de prueba desde SQL., Emails

[XML] Generar XML con SQL 2005.


23 01 2009

Saludos amigos, en esta ocasin estoy preparando algunos ejemplos de como generar cdigo XML desde consultas en SQL 2005, algunas de las opciones ms sencillas y rpidas para obtener datos con formato XML son: Tabla a la cual aplicaremos las consultas:

Primera forma de obtener XML con la clausula FOR XML AUTO:


SELECT * FROM dbo.USUARIO_SYS AS Usuario FOR XML AUTO, TYPE, ROOT('Usuarios')

Devuelve un nodo Raz llamado Usuarios y un nodo Usuario por cada una de las filas devueltas en la consulta, las cuales contienen atributos que son cada uno de los campos de la tabla.
<Usuarios> <Usuario id="7" nombre="Claudia" apellidos="Perez Torres" email="clau@mail.com" pass="a220109" fecha_add="2009-01-22T12:18:36.343" fecha_upd="2009-01-22T12:18:36.343" /> <Usuario id="10" nombre="Ivan" apellidos="Rangel Cuadros" email="ivan@mail.com" pass="852465" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-01-23T00:00:00" /> <Usuario id="11" nombre="Carol" apellidos="Rangel" email="Zepeda" pass="789123" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-0123T00:00:00" /> <Usuario id="12" nombre="Tin" apellidos="Tin" email="tin@tin.com" pass="456798" fecha_add="2009-01-24T00:00:00" fecha_upd="2009-0124T00:00:00" /> </Usuarios>

Segunda forma con la clausula FOR XML RAW:


SELECT * FROM dbo.USUARIO_SYS AS Usuario FOR XML RAW('NodoUsuario'), ROOT('Usuarios')

Devuelve el nodo raz Usuarios, y por cada fila devuelta en la consulta un nodo llamado NodoUsuario, por lo tanto con RAW podemos asignar un nombre a cada fila de retorno de nuestras consultas.
<Usuarios> <NodoUsuario id="7" nombre="Claudia" apellidos="Perez Torres" email="clau@mail.com" pass="a220109" fecha_add="2009-01-22T12:18:36.343" fecha_upd="2009-01-22T12:18:36.343" /> <NodoUsuario id="10" nombre="Ivan" apellidos="Rangel Cuadros" email="ivan@mail.com" pass="852465" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-01-23T00:00:00" /> <NodoUsuario id="11" nombre="Carol" apellidos="Rangel" email="Zepeda" pass="789123" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-0123T00:00:00" />

<NodoUsuario id="12" nombre="Tin" apellidos="Tin" email="tin@tin.com" pass="456798" fecha_add="2009-01-24T00:00:00" fecha_upd="2009-0124T00:00:00" /> </Usuarios>

Tercera forma con la clausula XML AUTO, Elements:


SELECT * FROM dbo.USUARIO_SYS AS Usuario FOR XML AUTO, Elements, ROOT('Usuarios')

Devuelve un XML formado por elementos, es decir que por cada fila que devuelva la consulta se agregara al XML como un elemento y por cada columna se agregara un nodo sin atributos.
<Usuarios> <Usuario> <id>7</id> <nombre>Claudia</nombre> <apellidos>Perez Torres</apellidos> <email>clau@mail.com</email> <pass>a220109</pass> <fecha_add>2009-01-22T12:18:36.343</fecha_add> <fecha_upd>2009-01-22T12:18:36.343</fecha_upd> </Usuario> <Usuario> <id>10</id> <nombre>Ivan</nombre> <apellidos>Rangel Cuadros</apellidos> <email>ivan@mail.com</email> <pass>852465</pass> <fecha_add>2009-01-23T00:00:00</fecha_add> <fecha_upd>2009-01-23T00:00:00</fecha_upd> </Usuario> <Usuario> <id>11</id> <nombre>Carol</nombre> <apellidos>Rangel</apellidos> <email>Zepeda</email> <pass>789123</pass> <fecha_add>2009-01-23T00:00:00</fecha_add> <fecha_upd>2009-01-23T00:00:00</fecha_upd> </Usuario> <Usuario> <id>12</id> <nombre>Tin</nombre> <apellidos>Tin</apellidos> <email>tin@tin.com</email> <pass>456798</pass> <fecha_add>2009-01-24T00:00:00</fecha_add> <fecha_upd>2009-01-24T00:00:00</fecha_upd> </Usuario> </Usuarios>

Estas son algunas de las formas de generar datos XML, espero y les sirva de ayuda, en otro post preparare informacin para guardar y consultar datos de variables o documentos XML. Dejen comentarios!!! Etiquetas de Technorati: SQL XML,XML,FOR XML,SQL XML 2005,SELECT FOR XML
Comentarios : 2 Comentarios Etiquetas: FOR XML, SELECT Categoras : SQL

FOR XML, SQL XML, SQL XML 2005, XML

[SQL] Procedimiento almacenado para Insertar datos con transaccin y control de errores.
22 01 2009

Hola amigos, en muchas ocasiones no sabemos si estamos realizando correctamente un proceso de insercin, actualizacin o eliminacin de datos a una tabla(s), esto para muchos es sumamente sencillo, pero me di a la tarea de preparar un pequeo ejemplo de esto. El script de T-Sql consiste en realizar un procedimiento almacenado que reciba los datos necesarios para insertarlos en la tabla, para garantizar la ejecucin correcta de las inserciones utilizo las transacciones Transact SQL y para validar la reversin de la transaccin en caso de que ocurra un ERROR utilizo el control de Errores Try Catch con RollBack. Qu es una Transaccin? Una transaccin es un conjunto de operaciones T-SQL que funcionan como un solo bloque de instrucciones, esto significa que si ocurre un fallo durante la ejecucin de alguna instruccin del bloque todas las dems fallaran, lo que implica que nada ms se ejecutara y la transaccin tendr que deshacer todo lo que haba ejecutado hasta donde ocurri el fallo, a eso se la llama reversin de la transaccin y se ejecuta con un ROLLBACK, en caso de una ejecucin correcta se tendr que grabar la transaccin con COMMIT, el objetivo de las transacciones es garantizar que los datos que se inserten, actualicen o eliminen queden CONSISTENTES en la base de datos. Despus de una ligera explicacin de las Transacciones veremos el siguiente ejemplo de una insercin dentro de un procedimiento almacenado con transaccin. Definiendo las estructuras. 1. La estructura del SP es:
CREATE PROCEDURE nombreProdedimiento -- Parmetros del SP

@Param1 AS Varchar(25), @Param2 AS Bigint . . . AS BEGIN -- Insertar bloque de instrucciones a ejecutar. /* SELECT UPDATE INSERT DELETE Lo que quieras.... */ END GO

2. La estructura del control de errores TRY-CATCH es:


Begin Try /*Bloque de instrucciones a validar. -------------------------------------------------------------------------------------------------------------------------*/ End Try Begin Catch /*Bloque de instrucciones que se ejecutan si ocurre un ERROR. -------------------------------------------------------------------------------------------------------------------------*/ End Catch

3. La estructura de una Transaccin es:


Begin Tran NombreTransaccion--Inicio de la transaccin con su nombre Tadd o el que elijas. /*Bloque de instrucciones a ejecutar en la Transaccin -----------------------------------------------------------------------------*/ Commit Tran NombreTransaccion--Confirmacin de la transaccin. Rollback Tran NombreTransaccion--Reversin de la transaccin.

4. Para finalizar veremos todo lo anterior armado ya en conjunto de SP, Transaccin y control de Errores.
-- ============================================= -- Author: Ivan Rangel Cuadros. -- Create date: 22/Ene/2009 -- Description: Procedimiento para Insertar registros en una Tabla con transaccin y control de errores. -- ============================================= CREATE PROCEDURE spAgregaUsuario @nom AS VARCHAR(50), @ape AS VARCHAR(50), @ema AS VARCHAR(30), @pas AS VARCHAR(20), @idJer AS BIGINT, @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add) VALUES (@nom, @ape, @ema, @pas, GETDATE()) INSERT INTO dbo.USUARIO_JERARQUIAS_SYS (id_usuario, id_jerarquia) VALUES (@@IDENTITY, @idJer) SET @msg = 'El Usuario se registro correctamente.' COMMIT TRAN Tadd End try Begin Catch SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la lnea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.' Rollback TRAN Tadd End Catch END GO

Explicando el procedimiento: 1. Recibe los datos a travs de parmetros de los cuales uno es de salida OutPut , que servir para indicar si la Insercin se realizo correctamente o no.

2. Crea una transaccin llamada Tadd, valida con TRY-CATCH las inserciones a las tablas USUARIO y USUARIO_JERARQUIAS. 3. Si las operaciones de insercin se ejecutan correctamente las confirma con COMMIT TRAN Tadd y regresa la variable @msg con un valor de confirmacin correcto, si ocurre un error se revierte la transaccin con ROLLBACK TRAN Tadd y devuelve en @msg un valor de error. Ejecutando el Procedimiento:
DECLARE @msg AS VARCHAR(100); EXEC spAgregaUsuario 'Claudia','Perez Torres','clau@mail.com','a220109',1,@msg OUTPUT SELECT @msg AS msg

Mensaje de insercin correcta:

Mensaje de Error en la Transaccin:

Apyame votando aqu: http://blogit.ms/TopBloggers.aspx en la categora SQL Server. Los pasos para votar estn aqu te llevara 3 min: Clic Aqu. Espero les sea de ayuda. Dejen comentarios!!! Etiquetas de Technorati: SQL,SQL 2005,Procedimeintos almacenados,Trasacciones,TSQL,TSQL,Control de errores,Try-Catch,Transact SQL,Store Procedure
Comentarios : 31 Comentarios Etiquetas: Control de errores, Procedimeintos almacenados, SQL, SQL 2005, Store Procedure, T-SQL, Transact SQL, Trasacciones, Try-Catch, TSQL Categoras : SQL

[SQL] Obtener las FK y sus relaciones de una Base de datos SQL 2005.
21 01 2009

El da de hoy un amigo me pregunto como ver las relaciones forneas (FK) de una tabla(s) en SQL 2005 desde cdigo y no en vista de diseo. Ponindome a buscar encontr algunos ejemplos, de los cuales considero el ms eficaz. El siguiente ejemplo muestra como obtener las llaves forneas en conjunto con sus relaciones a otras tablas en SQL Server 2005. Todo consiste en acceder al catalogo de sistema que contiene las llaves forneas y el catalogo de columnas de las mismas llaves.

USE tuBaseDeDatos; GO SELECT fk.name AS FK, OBJECT_NAME(fk.parent_object_id) AS TableName, COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName, OBJECT_NAME (fk.referenced_object_id) AS ReferenceTableName, COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName FROM sys.foreign_keys AS fk INNER JOIN sys.foreign_key_columns AS fc ON fk.OBJECT_ID = fc.constraint_object_id

@http://blog.sqlauthority.com/2007/09/04/sql-server-2005-find-tables-with-foreign-keyconstraint-in-database/ En base al cdigo anterior y para efectos de claridad prepare la siguiente consulta que obtiene el nombre de una relacin fornea (FK) y el nombre de la columna la cual funciona como FK, todo esto a partir de una determinada tabla.
USE tuBaseDeDatos; GO DECLARE @tabName AS Varchar(50) SET @tabName = 'dbo.TU_TABLA'--Nombre de la Tabla de la cual se obtendrn las FK's. SELECT OBJECT_NAME(f.constid) AS 'FKName', c.name AS 'ColName' FROM sysforeignkeys f INNER JOIN syscolumns c ON f.fkeyid = c.id AND f.fkey = c.colid WHERE fkeyid = OBJECT_ID(@tabName)

Espero les sea de ayuda. Dejen comentarios!!!