TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos...

126
Las siguientes notas se aplican únicamente a esta versión de SQL Server. Microsoft Update Para obtener información acerca de cómo 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 código de ejemplo no se instalan como parte del programa de instalación de SQL Server. Para instalar las bases de datos de ejemplo y el código 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 información sobre la compatibilidad con las bases de datos de ejemplo de SQL Server y el código muestra para SQL Server Express, vea la Información 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 versión Para obtener más información acerca de los últimos cambios en esta versión de SQL Server, vea el archivo Léame más reciente en http://go.microsoft.com/fwlink/?LinkId=141691. Documentación y vínculos 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 información acerca de la configuración del Área expuesta de SQL Server 2008 R2, vea los siguientes temas de la documentación de SQL Server 2008 R2: En los Libros en pantalla de SQL Server 2008 R2: “Descripción de la configuración del área expuesta”. En la ayuda del programa de instalación 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: Descripción de la configuración 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 mañana 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:

Transcript of TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos...

Page 1: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Las siguientes notas se aplican únicamente a esta versión de SQL Server.

Microsoft Update

Para obtener información acerca de cómo 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 código de ejemplo no se instalan como parte del programa

de instalación de SQL Server. Para instalar las bases de datos de ejemplo y el código 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 información sobre la compatibilidad con las bases

de datos de ejemplo de SQL Server y el código muestra para SQL Server Express, vea la Información 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 versión

Para obtener más información acerca de los últimos cambios en esta versión de SQL Server, vea el archivo

Léame más reciente en http://go.microsoft.com/fwlink/?LinkId=141691.

Documentación y vínculos

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 información acerca de la configuración del Área expuesta de SQL Server 2008 R2, vea los

siguientes temas de la documentación de SQL Server 2008 R2:

En los Libros en pantalla de SQL Server 2008 R2: “Descripción de la configuración del área expuesta”.

En la ayuda del programa de instalación 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: Descripción de la configuración 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 mañana 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:

Page 3: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Paso 1.

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

Paso 2.

Haz clic en el botón de Nueva consulta ubicado en la barra de herramientas.

Paso 3.

Veras nuevamente la pantalla de login del SQL Server 2008, ahí deberás dar clic en el

botón “Opciones >>”, Selecciona la base de datos a la que te deseas conectar (examina el

servidor), y da clic en el botón aceptar y posteriormente en el botón Conectar.

Page 5: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Saludos, espero les ayude un poco.

Technorati Tags: Windows Azure,SQL Azure,Connect SQL Azure

Comentarios : 1 comentario

Categorías : SQL

No puedo ver la propiedades de mis Proyectos en Visual

Studio 2008

29 06 2010

Saludos amigos, en esta ocasión me encontré con un problema en Visual Studio 2008, lo

que sucedía es que al abrir un proyecto de Windows Application y querer ver las

propiedades del mismo, estas no aparecía jamás, ni aunque abriera un nuevo proyecto, ya

investigando un poco y navegando por la red encontré la siguiente solución, la cual en mi

caso me funciono a la perfección:

1. Cierre Visual Studio 2008.

2. Abra la herramienta de símbolo 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 más problemas y con lo anterior no se soluciona, puede revisar este post: Más

soluciones

Bueno amigos espero les sea de ayuda, que tengan un buen día.

Etiquetas de Technorati: Visual Studio,Project Properties,devenv,resetskippkgs

Page 6: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Comentarios : 5 Comentarios »

Etiquetas: devenv, Project Properties, resetskippkgs, Visual Studio

Categorías : Visual Studio

[ASP.NET] Error del Servidor en Aplicación: Error

HTTP 404.3-Not Found.

3 10 2009

Saludos amigos en esta ocasión les dejo la solución al siguiente error:

Error del servidor en aplicación

Error HTTP 404.3 – Not Found

No puede obtener acceso a la página solicitada debido a la configuración de la

extensión. Si la página es un script, agregue un controlador. Si se debe cargar el

archivo, agregue una asignación MIME.

Bueno pues la causa más común que provoca este error es que ha instalado primero alguna

versión del Visual Studio 2005 o 2008, y posteriormente se habilito el servidor IIS (Internet

Information Service). Para solucionarlo se deben de correr las siguientes líneas desde el

CMD.

Si tiene el sistema operativo Windows XP podrá ejecutar la siguiente línea 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 línea 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 línea de comando:

Page 7: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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, versión=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 aplicación

Comentarios : 3 Comentarios »

Etiquetas: ASP NET, Error del servidor en aplicación, Error HTTP 404.3

Categorías : ASP NET

[SQL2008] ¿Cómo instalar MS SQL Server 2008?

3 10 2009

Saludos amigos en esta ocasión les dejo una serie de imágenes con algunas indicaciones

para que puedan instalar Microsoft SQL Server 2008.

Page 8: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Para realizar la instalación tiene que considerar los siguientes requerimientos antes de

comenzar. (de esta manera podrán 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-b68c-

fe5076bba986&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-bd99-

84e525b5ce61&displaylang=en

También pueden descargar la versión gratuita de SQL Server 2008 de:

http://www.microsoft.com/express/sql/download/

Listo, teniendo ya todos los requerimientos de la instalación podemos comenzar con el MS

SQL Server 2008:

Screen1:

Page 18: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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,Instalación de SQL Server 2008,SQL Server

2008 Installation.

Comentarios : 4 Comentarios »

Etiquetas: Instalación de SQL Server 2008, MS SQL Server 2008, SQL Server 2008

Installation.

Categorías : SQL

[SQL2008] Reduciendo el almacenamiento para

columnas Nulas – SPARSE Columns.

1 10 2009

Page 19: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Saludos amigos en esta ocasión 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

optimización 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 diseños de base de datos o aplicaciones que requieren un elevado

número 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”, sólo tiene que añadir el atributo de

almacenamiento “SPARSE” después de la columna de definición 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

Page 20: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 más eficiente la manera de almacenar las columnas que contengan valores

nulos, en resumen estas columnas aplicaran el ZEROBYTE y ahorremos un poco más 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

Categorías : SQL

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

SQL Server.

21 09 2009

Saludos amigos en esta ocasión les dejo un ejemplo de como poder buscar “Cadenas de

Texto” en la definición 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 continuación se mostrara un listado con los nombres de los

procedimientos almacenados que contienen nuestra palabra.

Page 22: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 búsqueda, de esta manera podemos buscar lo que deseemos dentro de

nuestros Stored Procedures y ver su definición rápidamente.

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,Definición de objetos.

Comentarios : 4 Comentarios »

Etiquetas: Buscar texto en SQL, Definición de objetos., OBJECT_DEFINITION, SQL 2008

Categorías : SQL

[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 imágenes 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.

Page 23: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Screen 2.

Screen 3. Seleccionen las bases de datos que desean instalar además de los Accesos rápidos

y archivos de ejemplo.

Page 27: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 de Base datos, Install samples Data

bases., Samples data bases. MS SQL Server 2008

Categorías : SQL

[SQL 2008] Bases de Datos de ejemplo de

MSSQL Server.

19 09 2009

Saludos amigos aquí les dejo los vínculos para que puedan descargar las bases de datos de

ejemplo de SQL Server “AdventureWorks” en una versión estable, ya que también existe

una versión alpha.

Vínculo: 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)

Page 29: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Saludos amigos aquí les dejo la manera fácil 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 definición de nuestros objetos de

base de datos.

Como ejemplo veremos la definición de un procedimiento almacenado.

Resultado:

Obteniendo la definición de una función:

Resultado:

Page 30: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

De esta manera podemos explorar raídamente 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

Categorías : SQL

[SQL 2008] Accesos directos de consulta.

31 08 2009

Saludos amigos en esta ocasión 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 escribiéndolo a cada instante, configuraremos un Acceso directo,:

1. Vamos al menú Herramientas >> Opciones.

Page 31: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 combinación de teclas con las que ejecutaremos la consulta.

b. Procedimientos almacenados: Son los SP que se ejecutaran, pueden ser también 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 botón Aceptar y abrimos una nueva consulta.

Page 33: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

[SQL 2005] Lista delimitada por comas en SQL Server

2005 – COALESCE.

28 07 2009

Saludos amigos en esta ocasión 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 método para SQL Server 2008 ( [SQL 2008] Crear una lista

delimitada por comas usando SELECT. ).

Bueno, para este ejemplo se utilizo la función COALESCE, la cual “Devuelve la primera

expresión distinta de NULL entre sus argumentos”.

Sintaxis.

COALESCE ( expression [ ,...n ] )

Si desea saber más sobre COALESCE vea: http://msdn.microsoft.com/es-

mx/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:

Page 34: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Tambien pueden ver este post, donde encontraran más información sobre COALESCE.

@http://blog.sqlauthority.com/2008/06/04/sql-server-create-a-comma-delimited-list-using-

select-clause-from-table-column/

Espero les sea de ayuda y me despido de ustedes, recuerden votar por mi blog, por favor

apóyenme, 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 List, SQL 2005

Categorías : SQL

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

Tecnológico 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 Programación ASP .Net 3.5 con Visual Studio 2008.

Gracias a los Estudiantes y Profesores que pusieron empeño e interés 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: [email protected]

Les dejo unas fotos tomadas en el Curso.

Page 35: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Comentarios :

Deja un

Comentario »

Categorías : SQL

[SQL-

2008] Creando Sinónimos para nuestros objetos de Base

de Datos.

25 07 2009

Saludos amigos en esta ocasión les dejo un ejemplo del uso y creación de sinónimos en

SQL Server 2008.

Page 36: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Los sinónimos sirven para hacer referencia a nuestros objetos de base de datos de una

manera más entendible, clara, o simplemente para abreviar los nombres de tal manera que

nos faciliten su uso en nuestras Consultas.

Los sinónimos se pueden aplicar a los siguientes Objetos de BD:

Procedimiento almacenado del ensamblado (CLR).

Función con valores de tabla del ensamblado (CLR).

Función escalar del ensamblado (CLR).

Funciones de agregado del ensamblado (CLR).

Procedimiento de filtro de replicación.

Procedimiento almacenado extendido.

Función escalar de SQL.

Función SQL con valores de tabla.

Función 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 CREACIÓN DEL SINÓNIMO, esto debido a que SQL Server comprueba

la existencia del Objeto al momento de llamar o ejecutar el Sinónimo.

También SQL Server 2008, nos permite Crear, Quitar y hacer Referencia a sinónimos

utilizando SQL dinámico, ¿Eso es grandioso no creen?.

Les dejo este ejemplo sencillo, en el cual crearemos un sinónimo para una Tabla (Objeto

Base).

1. Creando el Sinónimo.

USE prueba;

GO

CREATE SYNONYM dbo.DemoResultados -- Nombre del Sinónimo.

FOR dbo.DEMO_CicloEscolar_Examenes_Resultados; -- Objeto Base al cual le

aplicaremos el Sinónimo.

GO

2. Consultando datos del Sinónimo.

-- Consultando datos del Sinónimo.

SELECT alumnoID, examenID, calificacion FROM dbo.DemoResultados;

GO

3. Resultado.

Page 37: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Para eliminar el Sinónimo, lo pueden hacer de la siguiente manera:

USE prueba;

GO

DROP SYNONYM dbo.DemoResultados;

GO

Para más referencia les dejo este enlace: http://msdn.microsoft.com/es-

es/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

Categorías : 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

Tecnológico 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 Programación ASP .Net 3.5 con Visual Studio 2008.

Gracias a los Estudiantes y Profesores que pusieron empeño e interés 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.

Page 38: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Blog: http://sqlpsykrest.wordpress.com/

E-mail: [email protected]

Les dejo unas fotos del Curso.

Comentarios : 3

Comentarios »

Categorías : SQL

[SQL

2008]

Delete TOP con Chunking Data.

Page 39: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

21 07 2009

Saludos amigos después de la recuperación satisfactoria del pequeño accidente que sufrí, he

vuelto a escribir un articulo sobre una nueva opción 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”

información de una tabla, es decir, en lugar de ejecutar una sentencia DELETE para

ejecutar una sola operación, podemos fragmentar los datos en pequeñas partes y hacer que

sea más ligera la operación, y así mejorar el rendimiento y concurrencia de la base de datos

para tablas grandes que tengan un acceso frecuente.

Esta técnica 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 información, cada una de es confirmada

después de la terminación de su ejecución “COMMIT”, permitiendo que el servidor del

SQL reutilice potencialmente ese espacio del registro de transacciones.

Además del incremento en el registro de transacciones, en una actualización muy grande de

datos, si la consulta es cancelada, usted puede tener que esperar un gran lapso de tiempo

mientras que la transacción se deshace “Rolls Back”. Con partes más pequeñas, usted

puede continuar con su actualización de manera más rápida. También, el “Chunking”

permite más concurrencia contra la tabla modificada, permitiendo que las consultas de

usuario se ejecuten, en lugar de esperar varios minutos para que una modificación grande

termine.

Para este ejemplo crearemos una tabla temporal en la cual insertaremos 5000 registros,

posteriormente realizaremos un DELETE TOP para eliminar la información en lotes de

250 Filas, de esta manera eliminaremos la información en pequeñas partes generando

operaciones ligeras y no una sola operación que elimine todos los registros en una sola

ejecución.

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;

Page 40: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

-- 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 quedaría 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 eliminación.

SELECT COUNT(id) AS 'Antes de eliminar' FROM @tabla

--------------------------------------------------->>>

--------------------------------------------------->>>

Page 41: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 eliminación.

SELECT COUNT(id) AS 'Despues de eliminar' FROM @tabla

--------------------------------------------------->>>

--------------------------------------------------->>>

Resultado:

Espero les sea de ayuda, dejen comentarios y por favor apóyenme votando por mi Blog.

Page 42: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Apóyame votando

aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server. Los pasos para votar

están 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

Categorías : SQL

[SQL 2008] Manipulación 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 opción

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 visualización de errores definidos por el sistema y la agregación 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.

Page 43: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Los mensajes de error integrados son aquellos que se plantearon en respuesta a los errores

estándar de SQL Server.

Los mensajes de error definidos por el usuario se utilizan comúnmente en aplicaciones de

terceros (third-party applications), que definen un conjunto de mensajes de error para

usarse dentro de una aplicación. Los mensajes de error definidos por el usuario permiten la

parametrización, lo que significa que puede crear sus propios mensajes, los cuales

permitirán una personalización basada en parámetros.

Visualizando la Información 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 continuación.

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 Español, 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 implícitas:

0 al 10: Solo son mensajes informativos.

Page 44: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 transacción y

errores de sintaxis. Por ejemplo, una violación de llave primaria “PRIMARY KEY”

devolverá un error de nivel de gravedad 14. Un error de división 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 límites del motor

de base de datos.

20 al 25: Son errores fatales y de problemas del sistema, como los son hardware o software

dañado que afecta a la base de datos, problemas de integridad y errores de los medios de

comunicación.

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 símbolos combinados dentro de ellos:

El signo % es un parámetro de sustitución 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 parámetro de sustitución.

Creación 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

través de rutinas para el manejo de errores específicos de aplicación.

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‟

Page 45: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

[ , [ @lang = ] „language‟ ]

[ , [ @with_log = ] „with_log‟ ]

[ , [ @replace = ] „replace‟ ]

Descripción de los parámetros:

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 primaría de la

tabla; en su lugar, la clave única esta compuesta por la combinación 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

aplicación 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 parámetros 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 Español

(Spanish), y al intentar crear un mensajes de Error, me sale el siguiente mensaje de error:

Para esto debemos primero crear una versión 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 Español:

Page 46: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

-- Creando un mensaje de error en Español.

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')

-- Español

SET LANGUAGE Español;

RAISERROR (70003, 14, 1, N'dbo.DEMO_ROLES')

Resultado:

Por último vale la pena mencionar que para crear los parámetros en versiones no inglesas,

deben utilizar números seguidos del signo de exclamación “!” que coincidan con los

parámetros del mensaje original como lo muestro en el siguiente ejemplo:

Page 47: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 apóyenme votando por mi

blog.

Page 48: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Apóyame votando

aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server. Los pasos para votar

están 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 SQL, RAISERROR, sp_addmessage, sp_dropmessage

Categorías : SQL

[SQL] ¿Por qué utilizar Tablas Temporales Locales,

Globales o Variables de Tabla?.

12 06 2009

Saludos amigos en esta ocasión leyendo me encontré con un tema muy interesante acerca

de las tablas temporales en SQL, les dejo lo que traduje del tema con una explicación 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

automáticamente en la base de datos de tempdb.

Las tablas temporales se pueden usar en los siguientes escenarios:

Page 49: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Como alternativa a los cursores: por ejemplo, en lugar de utilizar un cursor de Transact-

SQL 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 acción 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 combinación “JOIN”

con diez tablas. A veces las consultas con varias combinaciones “JOINS” pueden

funcionar de manera incorrecta. Una técnica para intentar es la de fraccionar o fragmentar

una consulta grande en consultas más pequeñas. Si usamos tablas temporales, podemos

crear conjuntos de resultados intermedios basados en consultas de menor tamaño, en lugar

de intentar ejecutar una consulta única que sea demasiado grande y de combinaciones

múltiples “multi-joined”.

Como temporal en la sobrecarga baja de búsqueda de tabla: Por ejemplo, imagine que

usted está utilizando una consulta que tarda varios segundos en ejecutarse, pero sólo

muestra un pequeño 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 ejecución

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 código, 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 símbolo # y tablas temporales

Globales con el doble símbolo ##.

Tablas temporales Locales.

Las tablas temporales Locales están disponibles para usarse por cada conexión 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 representación 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

automáticamente de memoria cuando se cierra la conexión del usuario.

Creando la tabla temporal Local:

CREATE TABLE #ProductosResumen

( idProducto int NOT NULL PRIMARY KEY,

nombre varchar(75) NULL,

Page 50: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 código 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 conexión 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 simultáneas de una tabla temporal

Global, ya que esto generará un conflicto de nombres.

Page 51: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Las tablas temporales Globales de eliminan explícitamente de SQL Server ejecutando

DROP TABLE. También se eliminan automáticamente después de que se cierra la

conexión 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

producción.

Es importante considerar cuando una tabla va o debe ser compartida a través de

conexiones, se debe crear una tabla real, en lugar de una tabla temporal Global. No

obstante, SQL Server ofrece esto como una opción.

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 conexión 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 función; estas

variables de tabla son creado y definidas de forma similar a una tabla, sólo con un alcance

Page 52: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

de vida estrictamente definido. Las Variables de tabla suelen ser buenos reemplazos de

tablas temporales siempre y cuando el conjunto de datos es pequeño.

Razones para usar las variables de tabla:

Duración o alcance. La duración de la variable de tabla sólo vive durante la

ejecución del lote, función, o procedimiento almacenado.

Tiempos de bloqueo más 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

optimización 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 símbolo @:

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 ejecución del batch o bloque de instrucciones se eliminara la variable tabla, o

si colocamos una instrucción GO automáticamente 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,

Page 53: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 podrán 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.

Page 54: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Apóyame votando

aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server. Los pasos para votar

están 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

Categorías : SQL

¿Cómo votar por este Blog?

2 06 2009

Amigos, en esta ocasión les pido su apoyo para contar con su invaluable voto, es la primera

vez que concurso en Blog IT, como sabrán es una competencia de blogs con diferentes

categorías, yo estoy participando en la de SQL Server, para hacer esto más breve espero

contar con su voto, les dejo los pasos para que lo puedan hacer, me despido enviándoles un

cordial saludo.

Nota: En ocasiones el sitio de votación esta muy lento, por favor se paciente y

apóyame 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 botón:

Page 56: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Paso 5. Confirme el voto. Le llegara un correo electrónico 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 apóyenme, sin duda espero contar con ustedes.

Page 57: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Comentarios : 9 Comentarios »

Categorías : SQL

[SQL] Previniendo la Inyección de código.

1 06 2009

Saludos amigos, encontré un ejemplo de una función escalar “Scalar User-Defined

Functions”, por @Joseph Sack, la cual verifica si una instrucción TSQL esta intentando

ejecutar código malintencionado que puede afectar de manera catastrófica la información y

estructura de nuestras bases de datos. Como muchos de ustedes sabrán al tener sentencias

TSQL no parametrizadas corremos un enorme riesgo de sufrir ataques de inyección, el

script que a continuación les comparto verifica que la sentencia a ejecutar no contenga

código que intente alterar los datos o la estructura de los mismos.

1. Creamos una tabla llamada DEMO_ROLES, a la cual insertaremos datos a través de

Sentencias dinámicas 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,

Page 58: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 Inyección de código. Para este paso simularemos que la cadena de código

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 después se elimina la tabla, por lo tanto hasta la próxima ejecución de las

sentencias se producirá una excepción donde el SQL nos indicara que la tabla

Page 59: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

DEMO_ROLES no existe, esto a cause de que fue eliminada por la simulación de la

inyección de código.

Resultado 1 (Primera ejecución con inyección simulada):

Resultado 2 (Ejecuciones posteriores a la inyección 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 función escalar la cual se encargara de verificar si las sentencias a ejecutar son

maliciosas y contienen código 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

Page 60: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 función para verificar la inyección de

código.

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 código es sospecho de contener código

malicioso (TSQL Inyection).')

END

ELSE

BEGIN

EXEC sp_executesql @SQLtext;

END

Resultado 1 con inyección de código:

Resultado 2 sin inyección de código:

Page 61: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Pueden hacer la modificaciones que crean necesarias a la función de inyección de código,

ya que el funcionamiento y validación depende de las necesidades que deseemos cubrir.

Bueno amigos me despido y con gusto espero comentarios, por favor apóyenme

votando por mi blog en http://blogit.ms en la categoría de SQL Server.

Etiquetas de Technorati: TSQL Injection,Inyección de código SQL,SQL

Comentarios : Deja un Comentario »

Etiquetas: Inyección de código SQL, SQL, TSQL Injection

Categorías : 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 básico, 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','[email protected]','trew',GETDATE()),

('Claudia','Pérez','[email protected]','456789',GETDATE()),

('Mariana','Ragel','[email protected]','123456',GETDATE()),

('Noriga','Rojas','[email protected]','963852',GETDATE()),

('Pedro','Infante','[email protected]','789456',GETDATE());

GO

SELECT * FROM DEMO_USUARIOS;

GO

Resultado:

Page 62: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

2. Transformando la consulta a Procedimiento Almacenado básico:

--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 definición 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 definición del procedimiento almacenado.

Page 63: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Ahora vamos a CIFRAR (Encriptar) el procedimiento almacenado aplicando un ALTER

PROCEDURE en combinación 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 definición del procedimiento almacenado, ni podrá modificar al código del mismo, así

que cuando aplique el cifrado debe de estar completamente seguro de tener guardado el

código 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 definición del procedimiento almacenado cifrado.

g. Tratando de modificar el procedimiento cifrado.

Page 64: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Bueno, espero les sea de ayuda, espero sus comentarios, dudas o sugerencias, por favor

apóyenme botando por mi blog en la categoría 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 almacenados, SQL, WITH ENCRYPTION

Categorías : SQL

[SQL] Creando un resumen de las Tablas de una Base de

Datos en SQL 2008/2005.

26 05 2009

Saludos amigos en esta ocasión he elaborado un pequeño 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

información 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:

Page 65: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 BD, SQL 2005. Tablas de Systema de base de

datos, SQL 2008, Tipos de columna

Categorías : SQL

Page 66: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

[SQL] Como planear un Procedimiento almacenado en

SQL Server 2008 (Creación y ejecución).

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 Años de añejamiento, promoción

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

Page 67: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 parámetros que recibirá el SP.

Como tercera parte es crear el Batch de T-SQL que se ejecutara al llamar a nuestro SP.

Ejemplo:

El código:

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 ejecución:

USE prueba;

Page 68: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 también creo que a los usuarios que inician los ubicara un poco más

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 SP, SQL, SQL 2008, Store Procedure

Categorías : SQL

[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 pequeños extractos con información de páginas Web, las

cuales podemos agregar a nuestra Barra de favoritos de Internet Explorer 8. A

continuación les dejo un ejemplo de la creación de una Web Slice, la cual se llena con

información de una base de datos en SQL Server 2008 a través de un objeto Repeater.

Nota: Debe configurar la cadena de conexión a la base de datos, vea la entrada anterior:

http://sqlpsykrest.wordpress.com/2009/05/14/vs-2008asp-net-crear-una-cadena-de-conexin-

en-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">

Page 69: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

<p class="entry-title">Título de la Web Slice</p>

<div class="entry-content">

<!--Contenido de la Web Slice-->

</div>

</div>

Para indicar el título de la Web Slice, se debe colocar una clase CSS aplicada a un elemento

XHTML Párrafo <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.

Page 70: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Paso3, Agreguemos en el code-behine en el evento Load del formulario Web la ejecución

del comando de la base datos, el cual obtendrá la información de los productos que se

cargaran en un objeto Repeater llamado repeatProductos que posteriormente se mostrarán

en la Web Slice.

Ejemplo:

Imports System.Web

Imports System.Web.Configuration

Imports System.Data

Imports 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

Page 71: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

End Sub

End Class

En el ejemplo anterior utilizamos un objeto Dataset y un SqlDataAdapter, los cuales

reciben la información de la base da datos y la almacenan para cargarla en el objeto

Repeater llamado repeatProductos, una vez obtenida la información, 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:

Page 72: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 información 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

Page 73: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Etiquetas: ASP Net y Base de datos., Repeater, Web Slice

Categorías : ASP NET, SQL

[VS 2008–ASP NET] Crear una cadena de conexión en

ASP .NET y ejecutar un comando a una BD de SQL

Server 2008.

14 05 2009

Saludos amigos, en esta ocasión les mostrare un ejemplo de como crear una cadena de

conexión 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 información 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 contraseña 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 están en la instancia del SQL server ejecuta el

siguiente comando.

Page 74: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

USE master;

GO

SELECT [name] FROM sys.databases;

Resultado:

2. Ahora creamos un nuevo sitio Web en Visual Studio 2008, en el archivo de

configuración Web ( web.config ), buscamos el elemento <connectionStrings> contenido

dentro del elemento raíz <configuration> y agregamos una cadena de conexión 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 conexión 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 contraseña 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 botón y una etiqueta en un formulario web.

Page 75: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 código en el evento clic del botón 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()

Page 76: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 excepción 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 atención a la hora de crear la cadena de conexión ya que el nombre

debe de ser el mismo al que se agrego en el archivo de configuración web (web.config).

El comando al crearlo lleva dos parámetros iniciales, el comando de base de base de datos (

el cual selecciona el id de nuestro usuario) , y la cadena de conexión que utilizara para

llevar acabo la ejecución.

Agregamos los parámetros que recibirá el comando para poder consultar los datos, a esto se

le llama parametrizar sentencias o comandos SQL, para evitar los ataques de inyección de

código.

Page 77: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Para terminar se abre la conexión, 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, próximamente subiré videos.

Etiquetas de Technorati: Cadena de conexión

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 conexión VS, connectionString, Select

Command ASP Net, sqlCommand, sqlConnection, Visual Studio

Categorías : ASP NET, SQL

[SQL 2008] Métodos abreviados de teclado de MSSQL

Server Management Studio.

22 04 2009

Saludos amigos en esta ocasión les dejo un documento que elabore con información del

MSDN de Microsoft referente a los métodos abreviados del teclado para el Management

Page 78: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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

descargar he implementar.

Métodos abreviados de teclado para activar menús.

Métodos abreviados de teclado para administrar ventanas y barras de herramientas.

Métodos abreviados de teclado para mover el cursor.

Métodos abreviados de teclado para seleccionar texto.

Métodos abreviados de teclado para marcadores.

Métodos abreviados de teclado para el control de árbol.

Métodos abreviados de teclado para el Editor de código.

Métodos abreviados de teclado del depurador de Transact-SQL.

Métodos abreviados de teclado para Microsoft IntelliSense.

Métodos abreviados de teclado para la ventana de documento y el explorador.

Métodos abreviados de teclado para el Explorador de soluciones.

Métodos abreviados de teclado para la Ayuda y los Libros en pantalla.

Métodos abreviados de teclado para búsquedas.

Métodos abreviados de teclado para cortar y pegar.

Métodos abreviados de teclado para el visor de registros.

Métodos abreviados de teclado para el Monitor de actividad.

Métodos abreviados de teclado para el Monitor de replicación.

Métodos abreviados de teclado para el Visor de conflictos de replicación.

Métodos abreviados de teclado para administrar ventanas y barras de herramientas.

Acción Estándar SQL Server 2000

Cerrar la ventana secundaria MDI

actual

CTRL+F4 CTRL+F4

Imprimir CTRL+P CTRL+P

Salir ALT+F4 ALT+F4

Pasar al modo de pantalla

completa

MAYÚS+ALT+ENTRAR MAYÚS+ALT+ENTRAR

Cerrar la ventana de herramientas

actual

MAYÚS+ESC MAYÚS+ESC

Desplazarse por las siguientes

ventanas secundarias MDI

CTRL+TAB CTRL+TAB

Desplazarse por las ventanas

secundarias MDI anteriores

CTRL+MAYÚS+TAB CTRL+MAYÚS+TAB

Ir a la barra de herramientas de la

ventana de herramientas actual

MAYÚS+ALT Sin equivalencia

Ir a la siguiente ventana de

herramientas

ALT+F6 ALT+F6

Ir a la ventana seleccionada

anteriormente

MAYÚS+ALT+F6 MAYÚS+ALT+F6

Abrir una nueva ventana del

Editor de consultas

Sin equivalencia CTRL+O

Page 79: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Mostrar el Explorador de objetos F8 F8

Mostrar Servidores registrados CTRL+ALT+G Sin equivalencia

Mostrar el Explorador de plantillas CTRL+ALT+T CTRL+ALT+T

Mostrar el Explorador de

soluciones

CTRL+ALT+L CTRL+ALT+L

Mostrar la ventana Resumen F7 F7

Mostrar la ventana Propiedades F4 F4

Mostrar el cuadro de herramientas CTRL+ALT+X CTRL+ALT+X

Mostrar la ventana Marcadores CTRL+K, CTRL+W Sin equivalencia

Mostrar la ventana del explorador CTRL+ALT+R CTRL+ALT+R

Mostrar la ventana Lista de

errores (sólo Editor de Transact-

SQL)

CRTL+\, CTRL+E CRTL+\, CTRL+E

@http://msdn.microsoft.com/es-es/library/ms174205.aspx

Aquí esta el enlace:

http://cid-

597f52750e26b4c6.skydrive.live.com/self.aspx/.Public/M%c3%a9todos%20abreviados%2

0de%20teclado%20para%20MSQL%20Server%202008.pdf

Etiquetas de Technorati: Teclas rápidas,Métodos abreviados,Hot keys,SQL 2008

Comentarios : 2 Comentarios »

Etiquetas: Hot keys, Métodos abreviados, SQL 2008, Teclas rápidas

Categorías : SQL

[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 capítulos 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

Page 80: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 Gratis, SQL 2008

Categorías : SQL

[SQL 2008] Error al modificar Tablas.

3 04 2009

Saludos amigos, en esta ocasión les dejo la solución para el problema que se produce

cuando intentamos modificar una tabla en SQL 2008.

Esto sucede por que por default SQL 2008 hablita una opción que consiste en bloquear

cualquier cambio o modificación que requiera que la tabla se vuelva a crear.

Page 81: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

La solución consiste en ir al menú Herramientas>> Opciones.

En la ventana de opciones seleccionar la opción Designers >> Diseñadores 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 modificación 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 SQL

Categorías : SQL

Page 82: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

[SQL 2008] Error al modificar Tablas.

3 04 2009

Saludos amigos, en esta ocasión les dejo la solución para el problema que se produce

cuando intentamos modificar una tabla en SQL 2008.

Esto sucede por que por default SQL 2008 hablita una opción que consiste en bloquear

cualquier ´cambio o modificación que requiera que la tabla de vuelva a crear.

La solución consiste en ir al menú Herramientas>> Opciones.

Page 83: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

En la ventana de opciones seleccionar la opción Designers >> Diseñadores 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 modificación 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 SQL

Categorías : SQL

[SQL 2008] Insertar múltiples filas con valores (Nuevo).

31 03 2009

Hola amigos, probablemente alguna vez tratamos de insertar múltiples filas en una tabla, y

lo hacíamos repitiendo el comando INSERT (copiando y pegando) y solo cambiando el

valor de las columnas. En SQL 2008 se puede hacer una múltiple inserción 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 práctico e interesante.

1. Creamos una tabla “PRB_USUARIOS” .

CREATE TABLE dbo.PRB_USUARIOS

(Nombre VARCHAR(40),

Apellidos VARCHAR(40))

Page 84: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

GO

2. Insertamos múltiples filas (Observe la sintaxis).

--Insertando múltiples filas con valores.

INSERT dbo.PRB_USUARIOS

VALUES ('Ivan','Rangel'),

('Cruz','Treviño'),

('Pepe','El toro'),

('María','Félix'),

('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,Múltiple insert.

Comentarios : 12 Comentarios »

Etiquetas: INSERT, Múltiple insert., SQL 2008

Categorías : SQL

[SQL 2008] Actualización de columnas con tipo de

valor largo.

27 03 2009

Page 85: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Saludos, me encontré con una nueva funcionalidad en SQL 2008, esta es la implementación

del comando UPDATE con la clausula .WRITE, para tipo de datos con VALOR-

LARGO, Cabe mencionar que la inserción de tipos de datos de valor-largo es la misma que

en otras versiones de SQL server; Ahora SQL Server 2008 para la actualización de estos

tipos de datos incluye el método .WRITE.

Sintaxis:

UPDATE <table_or_view_name>

SET column_name = .WRITE ( expression , @Offset , @Length )

FROM <table_source>

WHERE <search_condition>

Parámetros del método .WRITE:

Argumento Descripción

expresión La expresión define el fragmento de texto

que se coloca en la columna.

@offset @Offset determina la posición inicial de los

datos existentes en donde el nuevo texto

debe ser colocado. Si @Offset es NULL,

significa que la nueva expresión se añadirá

al final de la columna (omitiendo también el

segundo parámetro @length).

@length @length determina la longitud de la sección

de la superposición.

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”:

Page 86: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

4. Actualicemos agregando más texto al final del campo “Contenido” utilizando el método

.WRITE:

UPDATE dbo.PRB_Articulo

SET Contenido .WRITE (' Como ven ahora podemos agregar más lineas a

nuestros textos largos con una simple

actualización, 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 añadió 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: Iván Rangel Cuadros.

UPDATE dbo.PRB_Articulo

SET Contenido .WRITE('Iván Rangel Cuadros', 182, 5)

WHERE ArticuloID = 1

GO

7. Mostramos el resultado final de la sustitución por medio de la actualización con el

método .WRITE.

Espero les sea de ayuda, dejen comentarios.

Etiquetas de Technorati: SQL 2008,Método WRITE,UPDATE – WRITE,Clausula

WRITE,Valores Largos SQL

Comentarios : Deja un Comentario »

Page 87: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Etiquetas: Clausula WRITE, Método WRITE, SQL 2008, UPDATE - WRITE, Valores

Largos SQL

Categorías : 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 múltiples valores a una variable

TSQL como:

SELECT @Var = @Var

La instrucción 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 ahorrándonos el SET.

DECLARE @txt AS VARCHAR(250) = ”

También es necesario mencionar que inicializamos la variable con un valor vacío 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 INTO dbo.PRB_USUARIOS VALUES ('Ivan','Rangel')

INSERT INTO dbo.PRB_USUARIOS VALUES ('Claudia','Perez')

INSERT INTO dbo.PRB_USUARIOS VALUES ('Maria','Cuadros')

INSERT INTO dbo.PRB_USUARIOS VALUES ('Mariana','Rangel')

INSERT INTO dbo.PRB_USUARIOS VALUES ('Mario','Cantinflas')

INSERT INTO dbo.PRB_USUARIOS VALUES ('Pedro','Infante')

GO

3. Ejecutamos la consulta de concatenación (Muy fácil ).

DECLARE @txt AS VARCHAR(250) = ''

SELECT @txt = @txt + Nombre + ' ' + Apellidos + ', ' FROM

dbo.PRB_USUARIOS

Page 88: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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

Categorías : SQL

[SQL(2005/2008)-UNPIVOT] Normalización de Datos

con UNPIVOT.

26 03 2009

Saludos nuevamente amigos, leyendo nuevamente sobre TSQL, me encontré el tema de

Normalización 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 cómo UNPIVOT se puede utilizar para eliminar la repetición de

grupos de columna, a menudo visto en tablas no normalizadas.

1. Creamos una tabla no normalizada con la repetición 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, 'Español', 'Inglés', 'Alemán')

Page 89: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

INSERT dbo.TraductorIdioma(IdTraductor, Idioma1, Idioma2, Idioma3)

VALUES( 2, 'Español', 'Portugués', 'Francés')

INSERT dbo.TraductorIdioma(IdTraductor, Idioma1, Idioma2, Idioma3)

VALUES( 3, 'Español', NULL, NULL)

GO

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

4. Por último aplicamos un UNPIVOT para normalizar la información 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

Categorías : SQL

[SQL-Select] Porque no utilizar SELECT *.

25 03 2009

Page 90: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Saludos amigos leyendo un libro de SQL 2008, me encontré con un párrafo 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 símbolo asterisco (*) devuelve todas las columnas para cada fila de tabla o vista en la

que se consulta.

Recordemos que, como buena práctica, es mejor hacer referencia explícita a las columnas

que deseemos recuperar en lugar de utilizar “SELECT *”.

Referencia explícita.

SELECT Id, Nombre, Apellidos FROM PRB_Usuario

Si desarrolla una aplicación que usa “SELECT *”, la aplicación pueden esperar las mismas

columnas (en el mismo orden) de la consulta. Si más 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 aplicación, ya que la nueva columna puede provocar un resultado inesperado.

Usar “SELECT *” también puede repercutir negativamente en:

1. El rendimiento, ya que la consulta puede devolver más datos de los que se

necesitan.

2. El aumento del tamaño del conjunto de resultados y operaciones de recuperación de

datos en la instancia de SQL Server.

3. Para aplicaciones que requieren miles de transacciones por segundo, el número 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

Categorías : SQL

[SQL CREATE] CREAR DATABASE-LOGIN-USER.

25 03 2009

Page 91: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 también se creara un Inicio de sesión (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 sesión lo eliminamos.

IF EXISTS( SELECT name FROM sys.syslogins WHERE name = 'UserPrueba' )

DROP LOGIN UserPrueba

GO

--Creando el inicio de sesión.

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 sesión.

CREATE USER UserPrueba

FOR LOGIN UserPrueba

GO

--Le agregamos un Rol al Usuario.

sp_addrolemember 'db_owner', 'UserPrueba'

GO

Page 93: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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

2005.

Comentarios : 1 comentario

Etiquetas: CREATE DATABASE, CREATE LOGIN, CREATE USER, SQL 2005

Categorías : SQL

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

23 03 2009

Saludos amigos después 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 ejecución

de la reducción 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

Page 94: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

RAISERROR(N'Fallo la verificación. La información 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 verificación 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 ubicación indicada en el script anterior.

Ahora, respaldamos el archivo de LOG y le aplicamos un SHRINKFILE.

El SHRINKFILE Reduce el tamaño del archivo de datos o de registro para la base de

datos actual, o vacía 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 tamaño menor que el tamaño especificado cuando se creó.

Así se restablece el tamaño mínimo de archivo al valor nuevo.

@http://msdn.microsoft.com/es-es/library/ms189493.aspx

El CHECKPOINT Escribe en disco todas las páginas desfasadas de la base de datos

actual. Las páginas desfasadas son páginas de datos que se han incluido en el caché la

memoria y se han modificado, pero todavía no se han guardado en el disco. Los puntos de

comprobación permiten ahorrar tiempo en una recuperación posterior al crear un punto en

el que se garantiza que todas las páginas desfasadas se hayan escrito en el disco.

El script final:

USE Prueba

CHECKPOINT

Page 95: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 más 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 decía que el archivo LOG no existía aunque físicamente ahí estuviera, después

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

Page 96: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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

Categorías : 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, números o ambos, bueno pues

me encontré algunos ejemplos de como hacer una función en SQL para lograr nuestro

objetivo de la forma más eficiente.

Les dejo un script de una función escalar la cual recibe dos parámetros, uno para el tamaño

de la cadena aleatoria y el segundo para seleccionar si se requieren números, letras o

ambos.

Vale la pena comentarles que se requiere crear una vista “VIEW” para poder hacer uso de

la función RAND(), ya que no es valido su uso dentro de una función 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

Page 97: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

GO

Aquí esta el script de la función (vean la parte donde se utiliza la vista vwRandom para no

generar un error):

CREATE FUNCTION fnCustomPass

(

@size AS INT, --Tamaño de la cadena aleatoria

@op AS VARCHAR(2) --Opción 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 @strPass = ''

SET @strChars = ''

SET @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

SET @numbers = '0123456789'

SET @strChars = CASE @op WHEN 'C' THEN @chars --Letras

WHEN 'N' THEN @numbers --Números

WHEN 'CN' THEN @chars + @numbers --Ambos (Letras

y Números)

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 función 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

Page 98: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

SELECT dbo.fnCustomPass(15,'N'),'Solo Números' --Cadena aleatoria que

contiene Números.

UNION ALL

SELECT dbo.fnCustomPass(15,'CN'), 'Letras y Números'--Cadena aleatoria

que contiene Letras y Números.

Resultado:

Espero les sea de ayuda, dejen comentarios o escriban si necesitan ayuda sobre algún tema.

Etiquetas de Technorati: SQL RAND(),RAND Function,Función Rand SQL 2005,Cadenas

aleatorias SQL

Comentarios : 2 Comentarios »

Etiquetas: Cadenas aleatorias SQL, Función Rand SQL 2005, RAND Function, SQL RAND()

Categorías : SQL

[SQL DATE FUNCTIONS] DATENAME

24 02 2009

Saludos amigos ya que estoy recordando lo de las fechas aquí les dejo otro ejemplo de

función para el manejo de fechas con DATENAME.

Con esta función podemos obtener el nombre de ciertas partes que forman una fecha, como

lo son el mes, el día 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', 'Día' AS 'Parte'

UNION ALL

SELECT DATENAME(month, @fecha),'Mes'

UNION ALL

SELECT DATENAME(year, @fecha),'Año'

UNION ALL

SELECT DATENAME(dayofyear, @fecha),'Día del año'

UNION ALL

SELECT DATENAME(week, @fecha),'Semana'

UNION ALL

Page 99: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

SELECT DATENAME(weekday, @fecha),'Día 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 función 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 Abreviaturas

year yy, yyyy

quarter qq, q

month mm, m

dayofyear dy, y

day dd, d

week wk, ww

weekday dw

Page 100: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

hour hh

minute mi, n

second ss, s

millisecond 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 SQL, funciones de fecha SQL, SQL DATE

Categorías : SQL

[SQL DATE FUNCTIONS] DATEPART.

24 02 2009

Saludos amigos en esta ocasión les traigo un ejemplo del manejo de fecha con la función

DATEPART de SQL 2005, con la cual podemos obtener el día, mes, año, día de la semana,

día del año, horas, minutos, segundos, etc.

A continuación les dejo una consulta con la cual podrán ver el resultado de la ejecución 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', 'día' AS '#'

UNION ALL

SELECT DATEPART(month, @fecha) ,'mes'

UNION ALL

SELECT DATEPART(year, @fecha) ,'año'

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'

Page 101: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

UNION ALL

SELECT DATEPART(dayofyear, @fecha) ,'día del año'

UNION ALL

SELECT DATEPART(week, @fecha) ,'semana'

UNION ALL

SELECT DATEPART(weekday, @fecha) ,'día de la semana'

Resultado:

Por último les dejo una tabla con abreviaturas para hacer referencia a las partes de fecha.

Columna1 Columna2

Parte de la fecha Abreviaturas

year yy, yyyy

quarter qq, q

month mm, m

dayofyear dy, y

day dd, d

week wk, ww

weekday dw

hour hh

minute mi, n

second ss, s

millisecond 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

Page 102: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Etiquetas: date functions, datepart, funciones de fecha SQL, SQL, SQL DATE

Categorías : SQL

[SQL] CIFRAR(encriptar) / DECIFRAR(desencriptar)

Campos en SQL2005

17 02 2009

Saludos amigos, en esta ocasión prepare un ejemplo de como en cifrar un campo en una

tabla en SQL 2005. Para hacer esto es usando la función:

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 función escalar en SQL 2005 para poder colocar el valor

cifrado. Hagan clic derecho sobre la opción “Funciones con valores escalares” y

seleccionen “Nueva función con valores escalares”.

La función quedaría de la siguiente manera.

CREATE FUNCTION [dbo].[fnColocaClave]

Page 103: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

(

@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 función 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','[email protected]',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 función para leer el campo cifrado.

CREATE FUNCTION fnLeeClave

(

@clave VARBINARY(8000)

)

RETURNS VARCHAR(25)

AS

BEGIN

DECLARE @pass AS VARCHAR(25)

------------------------------------

------------------------------------

Page 104: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

--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 aplicándole al campo cifrado la función 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!!!.

Apóyame votando aquí: http://blogit.ms en la categoría SQL Server.

Los pasos para votar están aquí te llevara 3 min: Clic Aquí.

Page 105: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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

2005.

Comentarios : 21 Comentarios »

Etiquetas: Cifrar campos, DECRYPT, Desencriptar, Encriptar, ENCRYPT, SQL 2005

Categorías : SQL

[SQL Dynamic] Consultas dinámicas con SQL 2005.

7 02 2009

Hola amigos, en esta ocasión colocare un ejemplo de la realización de consultas SQL de

manera dinámica, 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 dinámica.

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 parámetros 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 fecha_add between @de

AND @hasta';

exec sp_executesql @sql, N'@de datetime,@hasta

datetime','07/02/2009','09/02/2009'

Resultado:

Page 106: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Como se dieron cuenta se omitió la primera fila ya que no cumple con el criterio de fechas

de la búsqueda, ahora ya saben que al utilizar el TSQL dinámico también pueden hacer uso

de parámetros en sus consultas.

Espero les sirva.

Etiquetas de Technorati: sp_executesql,SQL dinámico,SQL 2005,TSQL Dinámico.

Comentarios : Deja un Comentario »

Etiquetas: sp_executesql, SQL 2005, SQL dinámico, TSQL Dinámico.

Categorías : 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 implementación.

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', --Descripción 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

utilización.

BEGIN TRY

DECLARE @backupSetId AS INT

--Seleccionamos el identificador del respaldo de la base de datos.

Page 107: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 verificación. La información 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 verificación 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, línea y número de

error.

PRINT ERROR_MESSAGE()

PRINT ERROR_LINE()

PRINT ERROR_NUMBER()

END CATCH

Ya solo les queda verificar la ruta física 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

Categorías : SQL

Page 108: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en 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 próximo 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','[email protected]','trew01', GETDATE(),GETDATE())

SELECT * FROM dbo.USUARIO_SYS

Ahora antes de ejecutar la instrucción 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','[email protected]','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

Page 109: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Comentarios : 1 comentario

Etiquetas: CHECKIDENT, DBCC, Reiniciar llave primaria, SQL

Categorías : SQL

[SQL] Instrucciones básicas de SQL 2005.

30 01 2009

Hola amigos, en esta ocasión este post va dedicado a las personas que se inician en las

consultas de base de datos y sus operaciones básicas como lo son el INSERT, UPDATE,

DELETE y SELECT.

Colocare un ejemplo de cada instrucción:

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','[email protected]','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!!!

Page 110: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 SQL,

SELECT, SQL, SQL 2005, SQL OPERACIONES BASICAS, UPDATE

Categorías : 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 electrónicos con código TSQL desde un perfil ya configurado en el post anterior, a

continuación les coloco el código:

EXEC msdb.dbo.sp_send_dbmail

@profile_name = 'sqlPsyPerfil',--Perfil de correo configurado.

@recipients = '[email protected]', -- A quien se va enviar el

correo.

@body = 'Este correo es enviado desde SQL Server 2005 con código 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 función es la de enviar mensajes de correo electrónico desde la base

de datos, para ejecutarlo este necesita una serie de parámetros, 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 más.

@body: Cuerpo del correo, por default es de tipo texto.

@subject: Asunto del correo.

@importance = Prioridad del envío del correo.

Page 111: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 electrónico 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 = '[email protected]',

@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

características 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 =

Page 112: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

„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 HTML con SQL 2005, Envio de correos

SQL, sp_send_dbmail, SQL Mail, TSQL Mail

Categorías : SQL

[SQL Mail] Envió de Correos desde SQL 2005.

28 01 2009

Saludos amigos, en esta ocasión explicare un breve ejemplo de como configurar la

Superficie de SQL Server para el envió de correos electrónicos.

Como primer paso tienen que ir a la opción del menú de Microsoft SQL Server 2005

>> Herramientas de configuración >> Configuración de superficie de SQL server.

Page 113: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Aparecerá una ventana de configuración de la cual deben de dar clic en la opción de

Configuración de superficie para características.

En la ventana que se abre, del árbol de opciones, en el nodo Motor de base de datos>>

Correo electrónico de base de datos, deben de activar la casilla que dice: Habilitar

procedimientos almacenados de correo electrónico de base de datos y dar clic en el

botón aplicar.

La otra opción 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 botón aplicar y posteriormente en aceptar.

Hasta este momento están habilitadas las opciones de correo electrónico, falta configurar

una cuenta y un perfil, el cual servirá para enviar los correos electrónicos. Antes de

comenzar necesitas los siguientes datos que son los mismos de una cuenta que se configura

en Microsoft Outlook.

1. Dirección de correo electrónico.

2. Servidor de correo saliente SMTP.

Nota: Si tu servidor de salida requiere autenticación necesitas anexar:

Page 114: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

1. Nombre de usuario (SMTP).

2. Contraseña (SMTP).

Ya que tienes a la mano esos datos, te vas al Explorador de objetos de SQL Server 2005 y

en la opción del árbol de opciones Administración >> Correo electrónico de base de

datos haces clic derecho y del menú contextual seleccionas la opción Configurar correo

electrónico de base de datos.

En el asistente de configuración de correo, seleccionen la casilla de Instalar Correo

electrónico de base de datos y den clic en siguiente.

Page 115: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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

una descripción.

ahora tendremos que crear una cuenta SMTP al perfil, hacemos clic en el botón Agregar…,

Aparecerá una ventana para agregar una nueva cuenta de correo, escriban un nombre de

cuenta, descripción, la dirección 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 autenticación SMTP

con el nombre de usuario y contraseña, den clic en el botón Aceptar y posteriormente en el

botón siguiente .

Page 116: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 botón Siguiente.

En la ventana de Configurar parámetros del sistema hacemos clic en Siguiente.

En la ventana de Finalización del asistente damos clic en Finalizar.

Si todos los datos fueron correctos, aparecerá una ventana de Configurando que indicara

que la configuración de correo se ejecuto correctamente, no debe de aparecer ningún error o

advertencia y por ultimo damos clic en el botó Cerrar.

Page 117: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Ahora solo nos queda enviar un correo electrónico de prueba, nos vamos al explorador de

objetos en el nodo Administración >> Correo electrónico de base da datos, damos clic

derecho y seleccionamos la opción Enviar correo electrónico de prueba.

Aparecer una pequeña ventana donde seleccionaremos el perfil que creamos hace algunos

pasos, escribiremos la dirección de correo a la que queremos enviar, un asunto y cuerpo del

mensaje, damos clic en el botón Enviar correo electrónico.

Page 118: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Ahora solo nos queda esperar que haya llegado el correo electrónico y si es así listo!!! ya

tenemos todo funcionando para el envió de Correos desde SQL Server 2005.

En el próximo Post enviaremos correos desde código TSQL utilizando el perfil que

acabamos de crear.

Espero les sea de ayuda, Dejen cometarios!!!

Etiquetas de Technorati: SQL Mail,Correo electrónico desde SQL Server,Emails desde

SQL 2005,SQL 2005,Correos de prueba desde SQL.

Comentarios : 26 Comentarios »

Etiquetas: Correo electrónico desde SQL Server, Correos de prueba desde SQL., Emails

desde SQL 2005, SQL 2005, SQL Mail

Categorías : SQL

[XML] Generar XML con SQL 2005.

23 01 2009

Saludos amigos, en esta ocasión estoy preparando algunos ejemplos de como generar

código XML desde consultas en SQL 2005, algunas de las opciones más sencillas y rápidas

para obtener datos con formato XML son:

Tabla a la cual aplicaremos las consultas:

Page 119: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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 Raíz 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="[email protected]" 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="[email protected]" 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-01-

23T00:00:00" />

<Usuario id="12" nombre="Tin" apellidos="Tin" email="[email protected]"

pass="456798" fecha_add="2009-01-24T00:00:00" fecha_upd="2009-01-

24T00: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 raíz 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="[email protected]" 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="[email protected]" 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-01-

23T00:00:00" />

Page 120: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

<NodoUsuario id="12" nombre="Tin" apellidos="Tin" email="[email protected]"

pass="456798" fecha_add="2009-01-24T00:00:00" fecha_upd="2009-01-

24T00: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>[email protected]</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>[email protected]</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>[email protected]</email>

<pass>456798</pass>

<fecha_add>2009-01-24T00:00:00</fecha_add>

<fecha_upd>2009-01-24T00:00:00</fecha_upd>

</Usuario>

</Usuarios>

Page 121: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Estas son algunas de las formas de generar datos XML, espero y les sirva de ayuda, en otro

post preparare información 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 FOR XML, SQL XML, SQL XML 2005, XML

Categorías : SQL

[SQL] Procedimiento almacenado para Insertar datos

con transacción y control de errores.

22 01 2009

Hola amigos, en muchas ocasiones no sabemos si estamos realizando correctamente un

proceso de inserción, actualización o eliminación de datos a una tabla(s), esto para muchos

es sumamente sencillo, pero me di a la tarea de preparar un pequeño 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 ejecución correcta de las

inserciones utilizo las transacciones “Transact SQL” y para validar la reversión de la

transacción en caso de que ocurra un ERROR utilizo el control de Errores Try – Catch

con RollBack.

¿Qué es una Transacción?

Una transacción es un conjunto de operaciones T-SQL que funcionan como un solo bloque

de instrucciones, esto significa que si ocurre un fallo durante la ejecución de alguna

instrucción del bloque todas las demás fallaran, lo que implica que nada más se ejecutara y

la transacción tendrá que deshacer todo lo que había ejecutado hasta donde ocurrió el fallo,

a eso se la llama reversión de la transacción y se ejecuta con un ROLLBACK, en caso de

una ejecución correcta se tendrá que grabar la transacción 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.

Después de una ligera explicación de las Transacciones veremos el siguiente ejemplo de

una inserción dentro de un procedimiento almacenado con transacción.

Definiendo las estructuras.

1. La estructura del SP es:

CREATE PROCEDURE nombreProdedimiento

-- Parámetros del SP

Page 122: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

@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 Transacción es:

Begin Tran NombreTransaccion--Inicio de la transacción con su nombre Tadd

o el que elijas.

/*Bloque de instrucciones a ejecutar en la Transacción

---------------------------------------

---------------------------------------*/

Commit Tran NombreTransaccion--Confirmación de la transacción.

Rollback Tran NombreTransaccion--Reversión de la transacción.

Page 123: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

4. Para finalizar veremos todo lo anterior armado ya en conjunto de SP, Transacción y

control de Errores.

-- =============================================

-- Author: Ivan Rangel Cuadros.

-- Create date: 22/Ene/2009

-- Description: Procedimiento para Insertar registros en una Tabla con

transacción 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 línea

' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'

Rollback TRAN Tadd

End Catch

END

GO

Explicando el procedimiento:

1. Recibe los datos a través de parámetros de los cuales uno es de salida OutPut , que

servirá para indicar si la Inserción se realizo correctamente o no.

Page 124: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

2. Crea una transacción llamada Tadd, valida con TRY-CATCH las inserciones a las tablas

USUARIO y USUARIO_JERARQUIAS.

3. Si las operaciones de inserción se ejecutan correctamente las confirma con COMMIT

TRAN Tadd y regresa la variable @msg con un valor de confirmación correcto, si ocurre

un error se revierte la transacción 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','[email protected]','a220109',1,@msg OUTPUT

SELECT @msg AS msg

Mensaje de inserción correcta:

Mensaje de Error en la Transacción:

Page 125: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

Apóyame votando aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server.

Los pasos para votar están aquí te llevara 3 min: Clic Aquí.

Espero les sea de ayuda. Dejen comentarios!!!

Etiquetas de Technorati: SQL,SQL 2005,Procedimeintos almacenados,Trasacciones,T-

SQL,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

Categorías : SQL

[SQL] Obtener las FK y sus relaciones de una Base de

datos SQL 2005.

21 01 2009

El día de hoy un amigo me pregunto como ver las relaciones foráneas (FK) de una tabla(s)

en SQL 2005 desde código y no en vista de diseño. Poniéndome a buscar encontré algunos

ejemplos, de los cuales considero el más eficaz. El siguiente ejemplo muestra como obtener

las llaves foráneas en conjunto con sus relaciones a otras tablas en SQL Server 2005. Todo

consiste en acceder al catalogo de sistema que contiene las llaves foráneas y el catalogo de

columnas de las mismas llaves.

Page 126: TIP Para conectar SQL Server 2008 (No R2) condocshare02.docshare.tips/files/9394/93942749.pdfSaludos amigos en esta ocasión les voy a escribir sobre una mejora implementada en SQL

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-key-

constraint-in-database/

En base al código anterior y para efectos de claridad prepare la siguiente consulta que

obtiene el nombre de una relación foránea (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 obtendrán

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!!!