Mostrando las entradas con la etiqueta SQL server. Mostrar todas las entradas
Mostrando las entradas con la etiqueta SQL server. Mostrar todas las entradas

jueves, 1 de septiembre de 2011

Encriptar columna sql server con aspnet

Acá les proporciono un ejemplo de como crear una tabla de usuarios con el campo de Contraseña encriptado, luego veremos desde una pagina aspnet como podemos validar el usuario contra dicha tabla.

1.) Crear el master key

/* Crea la key master */
USE northwind
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'SQLAuthority'
GO

2.) Crear el certificado de encriptacion

/* Crea certificado de encriptacion */

CREATE CERTIFICATE EncryptTestCert
WITH SUBJECT = 'SQLAuthority'
GO

3.) Crea la  Symmetric Key

/* Crea Symmetric Key */
CREATE SYMMETRIC KEY TestTableKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION
BY CERTIFICATE EncryptTestCert
GO

4.) Crea la tabla

Create Table Usuarios
(
    IdUsuario    int identity(1,1) primary key,
    Usuario        varchar(50),
    Contrasena    VARBINARY(256)
)


5.) Crea store procedure de ingrear usuarios

create proc Ingresa_usuario
(
    @Usuario        varchar(50),
    @Contrasena        varchar(50)
)
as

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert

insert into usuarios(Usuario,Contrasena)
values(@Usuario, ENCRYPTBYKEY(KEY_GUID('TestTableKey'),@Contrasena))
        
        
        

5.1) Ingresando usuarios a través del store procedure

/* Ingresando usuarios con el store procedure */
exec Ingresa_usuario 'usuario1','password'
exec Ingresa_usuario 'usuario2','P@ssw0rd'

/* muestra la columna encriptada */
select * from usuarios     

        

/* verificando que las contraseñas estén correctamente almacenadas. */

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT Usuario,CONVERT(VARCHAR(50),DECRYPTBYKEY(Contrasena)) AS Contrasena
FROM usuarios
insert into usuarios(Usuario,Contrasena)

        


6.) Crear store procedure de validar usuarios


create proc Valida_usuario
(
    @Usuario        varchar(50),
    @Contrasena        varchar(50)
)
as

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT count(*) as Contar
FROM usuarios
where Usuario=@Usuario
and CONVERT(VARCHAR(50),DECRYPTBYKEY(Contrasena))=@Contrasena
CLOSE SYMMETRIC KEY TestTableKey
  
Ahora en Visual Studio .net crearemos la pagina de validación


Creando pagina de login.


7.)  Agregue un pagina con el nombre de Login.aspx (clic en el menu web site new ítem)






8.) En la pagina agregue un control de login a la pagina desde el toolbox.






8.1) Su pagina se mirara así:






8.2) Capture el evento Authenticate del control login1 y agregue el código de autenticación (precione doble clic sobre el control para generar el evento) este evento tendrá el código de autenticar.


protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{ 

}


Validando con Linq to SQL Classes 

9) Agregue un contexto  haciendo click derecho sobre su proyecto, luego presioné "add item" y luego busque Linq to SQL Classes, agregue un nombre y luego add.






10) Habra su contexto y desde el server explorer arrastre los store procederes realizados en los pasos anteriores( paso 6 y 5), esto crea automáticamente 2 funciones que hacen referencia a los store procedure.






11) Validando usuarios en el evento Authenticate del paso 8.2:


protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    { 
        DataClassesDataContext db = new DataClassesDataContext();

        var query = db.Valida_usuario(Login1.UserName, Login1.Password).Single(); 

        if (query.contar > 0)
        { 
            //password correcto 
            System.Web.Security.FormsAuthentication.SetAuthCookie(Login1.UserName, false);
            Response.Redirect("Default.aspx"); 
        } 
        else 
        { 
            //password incorrecto 
            Login1.FailureText = "Usuario o password incorrecto"; 
        } 

    }


12.) Creando usuarios ( pendiente de terminar)
Ver

lunes, 18 de julio de 2011

Rank de datos agrupados (ROW_NUMBER(), DENSE_RANK() , NTILE)

No hay comentarios.:
Ejemplos con nortwind.

ROW_NUMBER()
 Devuelve el número secuencial de una fila de una partición de un conjunto de resultados, comenzando con 1 para la primera fila de cada partición.

select ROW_NUMBER() over (order by companyname),
 companyname,CustomerID
from Customers

DENSE_RANK()
 Devuelve el rango de filas dentro de la partición de un conjunto de resultados, sin ningún espacio en la clasificación. El rango de una fila es uno más el número de rangos distintos anteriores a la fila en cuestión.


With tble1 AS
(
select Orders.CustomerID,
COUNT(*) as counts 
from Orders
group by CustomerID
)
select tble1.customerid,
DENSE_RANK() OVER (ORDER BY tble1.counts desc) AS [cust grade]
from tble1

NTILE


Distribuye las filas de una partición ordenada en un número especificado de grupos. Los grupos se numeran a partir del uno. Para cada fila, NTILE devuelve el número del grupo al que pertenece la fila.

select ProductName, UnitsInStock,
NTILE (2) OVER(order by unitsinstock desc) as 'Ntile'
from Products
where UnitsInStock>20
Ver

lunes, 11 de abril de 2011

Generar Script con data sql server

3 comentarios:
Con el asistente Generar y publicar scripts se puede crear un script Transact-SQL para muchos objetos. El asistente genera un script de todos los objetos de una base de datos o un subconjunto de los objetos que seleccione. El asistente dispone de muchas opciones para los scripts, como la posibilidad de incluir permisos, la intercalación, las restricciones, etc.

En este ejemplo veremos como exportar el scritpt de una base datos con sus respectivos datos

1.) Clic derecho sobre la base datos, tareas, Generar Scripts...



2.) El siguiente paso elija "Seleccionar objetos de base datos especifico" allí puede elegir lo diferentes objetos  en esta caso la tabla "Categories"


3.) En la 3 pantalla puede elegir como generara el script ejemplo si a pantalla o un archivo, pero notros vamos agregar una opción extra a la generación, presionando el botón  "Avanzadas", en esta pantalla tiene varias opciones, pero la que buscamos es "Tipos de datos deben incluir", alli elegimos "Esquema y datos"



4.) Elegimos la forma de salida y tenemos nuestro script.

Ver

jueves, 4 de noviembre de 2010

Reiniciar el Identity de una Tabla‏

No hay comentarios.:
Esto se puede hacer con checkident esta instrucción sirve para verificar, saber el número actual del identity y para asignarle un nuevo valor.

Si quiere reiniciarlo para que inicie en uno hacer el siguiente ejemplo:
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 0);

Solo tengan cuidado porque si lo regresan a un número menor al que tienen ya ingresado les dará llave duplicada.


Permisos necesarios:


Sysadmin, db_owner o db_ddladmin.

A. Restablecer el valor de identidad actual si es necesario


En el ejemplo siguiente, si es necesario, se restablece el valor de identidad actual de la tabla Employee de la base de datos AdventureWorks.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. Informar del valor de identidad actual

En el ejemplo siguiente se informa del valor de identidad actual de la tabla Employee de la base de datos AdventureWorks, y no se corrige el valor de identidad si es incorrecto.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. Hacer que el valor de identidad actual sea un nuevo valor

En el ejemplo siguiente, el valor de identidad actual de la columna EmployeeID de la tabla Employee se establece en el valor 300. Dado que la tabla ya contiene filas, la fila siguiente que se inserte utilizará el valor 301, es decir, el valor de identidad actual más 1, que es el valor de incremento actual definido para la columna.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 300);
Go


Articulo MSDN
Ver

miércoles, 25 de agosto de 2010

TRUNC en SQL Server

1 comentario:
Cuando trabaje con Oracle utiliza mucho la función TRUNC de PL/SQL realmente es muy util esta función.

Funciona más o menos así:  ingresa 21/08/1973 8:30:30 regresa 21/08/1973 00:00:00.

Pero adivinen que me di cuenta en SQL no existe, así que decidí crearla aquí está el código por si la necesitan.

Como Utilizarlo 
 

 
 
Código:
 
CREATE FUNCTION dbo.trunc (@FechaEntrada datetime)
RETURNS datetime
AS
BEGIN
DECLARE @fechaSalida datetime
SET @fechaSalida = CONVERT(datetime, CONVERT(varchar(10),@input, 103), 103)
RETURN @fechaSalida
END
 
Como utilizarlo:
 
SELECT dbo.trunc(fecha)
FROM conta.tabla
Ver

domingo, 25 de julio de 2010

Cambiar el propietario de la base de datos

3 comentarios:
Se puede utilizar el  procedimiento almacenado sp_changedbowner  para cambiar el propietario de la base.

Reciente migre una base de datos y traía un propietario erróneo cuando quise borrar, me salió el siguiente error:

Error 15150, Cannot drop the user 'dbo' ,  drop failed for User 'dbo'


Solución:
Cambio el propietario de la base de datos y podrá borrar el usuario.


USE Nortwind
GO
EXEC sp_changedbowner 'Otro_Usuario'
GO
 
 



change the database owner



You can use the sp_changedbowner system stored procedure to change the database owner.




USE Nortwind
GO
EXEC sp_changedbowner 'Other_User'
GO
 
Ver

jueves, 20 de mayo de 2010

Auditoria de cambios en sql server - Change Data Capture

No hay comentarios.:
SQL Server 2008 tiene una nueva funcionalidad que permite de una forma facil darle seguimiento a nuestras tablas, registra  los cambios (insert, update y delete) que se producen. Esta técnica puede ser aprovechada para muy diversas tareas, por ejemplo para registros de auditoría o carga de Data Warehouses.

Esta funcionalidad se llama Change Data Capture, como funciona:


En primer lugar, debemos de activar Change Data Capture en la base de datos:


USE AdventureWorks2008
GO

EXEC sys.sp_cdc_enable_db
GO

Al habilitar una base de datos para Change Data Tracking, se crea en esa base de datos un esquema denominada cdc y un usuario con el mismo nombre, así como las tablas de metadatos necesarios para el funcionamiento. A continuación, y tras haber comprobado que el servicio SQL Server Agent está iniciado, habilitaremos las tablas que deseamos comprobar. En el siguiente ejemplo se habilita el seguimiento para la tabla HumanResources.Department:


EXECUTE sys.sp_cdc_enable_table
@source_schema = N'HumanResources'
, @source_name = N'Department'
, @role_name = N'cdc_Admin';
GO

Para utilizar Change Tracking, debemos de activarlo, de modo similar a Change Data Capture, primero a nivel de base de datos y después, seleccionando la tabla, como muestra el siguiente código.


ALTER DATABASE AdventureWorks2008
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)
GO

ALTER TABLE HumanResources.Department
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)

Para ver lo cambiado ver tablas del sistema.

__$operation

Identifica la operación del lenguaje de manipulación de datos (DML) necesaria para aplicar la fila de datos modificados al origen de datos de destino. Puede ser uno de los siguientes elementos:

1 = eliminar
2 = insertar
3 = actualización (los valores de columna capturados son los de antes de la operación de actualización). Este valor solamente se aplica cuando se especifica la opción de filtro de filas 'all update old'.
4 = actualización (los valores de columna capturados son los de después de la operación de actualización)


Nota:
solo funciona con las siguientes versiones:
Enterprise, Developer y Evaluation.

documentacion:
http://msdn.microsoft.com/en-us/library/bb522489.aspx
Ver

miércoles, 19 de mayo de 2010

Criptogia en base datos

No hay comentarios.:
Que es Criptogia

En ocasiones se emplean los verbos encriptar y cifrar como sinónimos, por si en algun ejemplo no dice solo Criptologia.
Encriptar Base de datos:

Usted puede tomar varias precauciones para proteger la base de datos, como diseñar un sistema seguro, cifrar los datos confidenciales e instalar un firewall alrededor de los servidores de bases de datos. Sin embargo, si se diera el caso de un robo de medios físicos (como unidades de disco o cintas de copia de seguridad), un usuario malintencionado sólo tendría que restaurar o adjuntar la base de datos y examinar los datos. Una solución consiste en cifrar los datos confidenciales en la base de datos y usar un certificado para proteger las claves que se utilizan para cifrarlos. Esto evita que utilice los datos cualquiera que carezca de las claves, pero este tipo de protección debe planearse de antemano.

El cifrado de datos transparente (TDE) cifra el almacenamiento de una base de datos completa. TDE cifra los datos utilizando una clave simétrica conocida como clave de cifrado de base de datos,

Adjunto Imagen de como funciona.

Como habilitarlo:

http://msdn.microsoft.com/es-es/library/cc645957.aspx

http://msdn.microsoft.com/es-es/library/bb934049.aspx
Como funciona a bajo nivel el TDE

http://msdn.microsoft.com/en-us/library/cc278098.aspx
__________________________________________________________________________________________

Cifrar una columna de datos

puede utilizar la función ENCRYPTBYKEY que cifra datos utilizando una clave simétrica.

Esto sirve para encriptar campos por ejemplo pasword, No. seguro social, etc.

Ejemplo practicos

http://msdn.microsoft.com/es-es/library/ms179331.aspx


http://msdn.microsoft.com/es-es/library/ms174361.aspx - Encript

http://msdn.microsoft.com/es-es/library/ms181860.aspx - deEncript
_______________________________________________________________________________

Elegir un algoritmo de cifrado

El cifrado es una de las medidas defensivas con que cuenta cualquier administrador que desee proteger una instancia de SQL Server.

Los algoritmos de cifrado definen transformaciones de datos que los usuarios no autorizados no pueden revertir con facilidad. SQL Server permite a los administradores y los programadores elegir entre varios algoritmos, incluidos DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, RC4 de 128 bits, DESX, AES de 128 bits, AES de 192 bits y AES de 256 bits.

Ningún algoritmo único resulta idóneo para todas las situaciones. Además, ofrecer información detallada sobre las ventajas de cada uno queda fuera del ámbito de los Libros en pantalla de SQL Server. No obstante, se aplican los siguientes principios generales:

  • El cifrado seguro suele consumir más recursos de la CPU que un cifrado menos seguro.
  • Las claves largas suelen producir un cifrado más seguro que las claves cortas.
  • El cifrado asimétrico es más seguro que el simétrico con la misma longitud de clave, pero es relativamente lento.
  • Los cifrados en bloque con claves largas son más seguros que los cifrados en secuencia.
  • Las contraseñas largas y complejas son más seguras que las contraseñas cortas.
  • Si cifra una gran cantidad de datos, debe cifrar los datos con una clave simétrica y cifrar la clave simétrica con una clave asimétrica.
  • Los datos cifrados no se pueden comprimir, pero los datos comprimidos se pueden cifrar. Si utiliza compresión, debe comprimir los datos antes de cifrarlos. li>
http://msdn.microsoft.com/es-es/library/ms345262.aspx
Ver

jueves, 6 de mayo de 2010

Base de datos esta recovery mode

No hay comentarios.:
¿Su base de datos esta en modo recuperación (recovery mode ) sin ninguna motivo y sin iniciar ningún restore?

si su respuesta "si" usted esta en un problema jajja

pero se soluciona así:


use Nombredb
DBCC CHECKDB


es un post simple pero de repente les ayuda.
Ver

miércoles, 21 de abril de 2010

SNAPSHOT DATABASE

No hay comentarios.:
Han visto que el Object Explorer en el SQL Server Management Studio donde se encuentran las bases de datos hay una carpeta que dice Database Snapshots.

Esto puedo confundir mucho ya que pareciera que fuera parte de la replicación pero no es así, realmente es una base de datos sólo lectura, estática basada en una base datos normal (fuente).

En la parte de abajo hay un ejemplo reemplacen la información por sulla y aparecerá ya base datos bajo la carpeta de Database Snapshots.

Cuál es su función:
Pueden ser utilizados para los informes. Asimismo, en el caso de un error del usuario en una base de datos de código fuente, puede restaurar la base de datos fuente al estado en que estaba cuando se creó el snapshot.

La pérdida de datos se limita a las actualizaciones de la base de datos desde su creación de la instantánea. Además, la creación de una snapshot de base de datos puede ser útil inmediatamente antes de hacer un cambio importante de una base de datos, como cambiar el esquema o la estructura de una tabla.

Tiene 3 posibles usos:


• Mantener los datos históricos para la generación de informes (Reporteria)
• Protección de datos de errores de usuario (Backup).
• La gestión de una base de datos de prueba (Base datos de pruebas)

Importante:
Database snapshots, fueron introducidos en SQL Server 2005, sólo están disponibles en las ediciones Enterprise de SQL Server 2005, SQL Server 2008 y SQL Server 2008 R2.

En la parte de abajo hay un ejemplo reemplacen la información por sulla y aparecerá ya base datos bajo la carpeta de Database Snapshots.

Crear una base datos snapshots



SNAPSHOT CREATE DATABASE AdventureWorks_dbss1800 ON
( NAME = AdventureWorks_Data, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )
AS SNAPSHOT OF AdventureWorks
;


Si hacer un restore de en base a un SNAPSHOT seria de la siguiente manera:

Restore


USE master
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO


Que permisos necesito para crear una:
La única manera de crear una SNAPSHOT CREATE DATABASE es utilizar Transact-SQL. Cualquier usuario que pueda crear una base de datos puede crear una snapshot de base de datos, sin embargo, para crear una instantánea de una base de datos reflejada, usted debe ser un miembro de la función de servidor sysadmin.

Articulo de referencia:
http://msdn.microsoft.com/en-us/library/ms175469.aspx
http://msdn.microsoft.com/en-us/library/ms187054.aspx
http://www.sqlcoffee.com/Tips0004.htm
Ver

lunes, 1 de marzo de 2010

Compresión en Backup de SQL Server 2008

No hay comentarios.:
Para realizar esto solo hay que agregar COMPRESIÓN en la cláusula del comando BACKUP.
En el siguiente ejemplo tendremos una backup sin compresión y uno con compresión para que puedan notar que se pueden ahorrar espacio pero ser el backup se tardara un poco mas.

DECLARE @tiempo datetime

SET @tiempo = GETDATE()
BACKUP DATABASE Adventureworks
TO DISK = 'C:\Adventureworks.bak'
WITH INIT
SELECT DATEDIFF(ms, @tiempo , GETDATE())

SET @tiempo = GETDATE()
BACKUP DATABASE Adventureworks
TO DISK = 'C:\Adventureworks.bak'
WITH INIT, COMPRESSION
SELECT DATEDIFF(ms, @tiempo , GETDATE())

Para que les funcione tienen que tener la versión Enterprise ya que en la estándar no lo soporta.
http://technet.microsoft.com/en-us/library/bb964719.aspx
Radio de compresión

Para calcular la radio de compresión de una copia de seguridad, utilice los valores de la copia de seguridad en las columnas y de backup_size compressed_backup_size de la tabla de la historia de backupset, como sigue:

backup_size: compressed_backup_size

Por ejemplo, un radio de compresión 3:1 indica que está alrededor del 66% de ahorro de espacio en disco. Para consultar sobre estas columnas, puede usar la siguiente instrucción Transact-SQL

SELECT backup_size/compressed_backup_size FROM msdb..backupset;

Espero que les sirva.
Ver

sábado, 20 de febrero de 2010

Generación automática de procedimientos almacenados

3 comentarios:
La automatización hace que el tiempo de codificación sea más rápido y garantiza que todos los procedimientos generados usaran la misma estructura.


Este post incluye como crear automaticamente los scripts T-SQL de los procedimientos almacenados.



Ejemplo:
EXEC pr__SYS_MakeUpdateRecordProc 'Customers'
Crea scripts T-SQL de Store Procedure de Update

EXEC pr__SYS_MakeDeleteRecordProc 'Customers'

Crea scripts T-SQL de Store Procedure de Delete

EXEC pr__SYS_MakeInsertRecordProc 'Customers'

Crea scripts T-SQL de Store Procedure de Insert

EXEC pr__SYS_MakeSelectRecordProc

Crea scripts T-SQL de Store Procedure de Select 'Customers'

Creando automaticamente los store procedure quedarian con los siguiente nombres, como se pueden dar cuenta tiene la misma nomenclatura. En el ejemplo esta los store procedure de Customers y Orders.


prApp_Customers_Delete
prApp_Customers_Insert
prApp_Customers_Select
prApp_Customers_Update
prApp_Orders_Delete
prApp_Orders_Insert
prApp_Orders_Select
prApp_Orders_Update

Miremos un ejemplo completo,
crea el store para la tabla 'Order_Details'

EXEC pr__SYS_MakeUpdateRecordProc 'Order_Details'

El T-SQL Script quedara de la siguiente manera:


IF EXISTS(SELECT * FROM sysobjects WHERE name =
'prApp_Order_Details_Update')
DROP PROC prApp_Order_Details_Update
GO
-- Update a single record in Order_Details

CREATE PROC prApp_Order_Details_Update
@OrderID int,
@ProductID int,
@UnitPrice money,
@Quantity smallint,
@Discount real
AS

UPDATE Order_Details
SET UnitPrice = @UnitPrice,
Quantity = @Quantity,
Discount = @Discount
WHERE OrderID = @OrderID
AND ProductID = @ProductID

GO


Tienen que tomar ese T-SQL Script y ejecutarlo, pero si quieren evitarse ese paso solo tiene que agregar un 1 a parametro opcional. Ejemplo:

EXEC pr__SYS_MakeUpdateRecordProc 'Order_Details',1



Descarga de código disponible en:
StoredProcedures.exe (108 KB)


Articulo Original:

Msdn Magazine
Ver

como identificar su version y edicion de sql server

No hay comentarios.:
Cómo determinar la versión de SQL Server que se ejecuta
Para saber la versión de Microsoft SQL Server 2008 se ejecuta, conéctese a SQL Server 2008 con SQL Server Management Studio y, a continuación, ejecute la instrucción de Transact-SQL

Con esto podran saber que version y que service pack tienen.

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')


SELECT @@VERSION
Ver

martes, 24 de noviembre de 2009

Obtener el primer y último día de un mes en SQL Server

4 comentarios:
declare @d varchar(2),@m varchar(2),@a varchar(4), @FE varchar(50) , @FI varchar(50) , @FN varchar(50),@FcF varchar(50)
--//recupera el dia ctual
set @d=day(getdate())
--//recupera el mes actual
set @m=month(getdate())
--//recupera el año actual
set @a=year(getdate())
--//fecha dada por el sistema
set @FE=@d + '/' + @m + '/' + @a
--//Primer dia del Mes
set @FI='01' + '/' + @m + '/' + @a
--//Ultimo dia del mes
set @FN=dateadd( month,1,@FI) -1
--//Ultimo dia del mes en formato dd/mm/yyyy
set @FcF=cast(day(@FN)as varchar) + '/' + cast(month(@FN)as varchar) + '/' + cast(year(@FN)as varchar)

Print 'Primer dia del Mes==>>' + @FI
Print 'Ultimo dia del Mes==>>' + @FcF
Ver

viernes, 15 de mayo de 2009

posición de una subcadena(sql server, oracle)

1 comentario:
Charindex la función se usa en Microsoft SQL Server para recuperar la posición de una subcadena en la cadena especificada. Oracle utiliza la función INSTR. Estas funciones tienen la misma sintaxis y difieren en el parámetro de orden.

Ejemplo del uso Charindex
1> DECLARE @FullName VarChar(25), @SpaceIndex TinyInt
2> SET @FullName = 'www.asp.net'
3>
4> -- Obtener el índice de delimitado de el espacio:
5> SET @SpaceIndex = CHARINDEX('asp', @FullName)
6> -- retorna todos los caracteres de la izquieda del espacio
7> SELECT LEFT(@FullName, @SpaceIndex - 1)
8> GO

repuesta:
www.


Ejemplo de conversion de Microsoft SQL Server CHARINDEX para oracle Oracle









Microsoft SQL Server
Oracle
CREATE PROCEDURE sql_sp_charindex
as
begin
DECLARE @a VARCHAR(10)
DECLARE @b VARCHAR(10)
charindex (@a,@b)
end;

CREATE OR REPLACE PROCEDURE sql_sp_charindex
AS
v_a VARCHAR2(10);
v_b VARCHAR2(10);
BEGIN
INSTR(v_b,v_a);
end;

CREATE PROCEDURE sql_sp_charindex2
as
begin
DECLARE @a VARCHAR(10)
DECLARE @b VARCHAR(10)
charindex (@a,@b,1)
end;
CREATE OR REPLACE PROCEDURE sql_sp_charindex2
AS
v_a VARCHAR2(10);
v_b VARCHAR2(10);
BEGIN
INSTR(v_b,v_a,1);
end;


Tambien puede combinar con el sub string

Ejemplo

DECLARE @FullName VarChar(25)
SET @FullName = 'www.asp.net'

SELECT SUBSTRING(@FullName, 1,CHARINDEX('asp', @FullName) - 1)
GO


respuesta:
www.
Ver

lunes, 29 de septiembre de 2008

Crear un Store Procedure en SQL 2005 con Visual Studio

2 comentarios:
Creando Codigo para objetos de Sql server 2005
Pasos.
1.) Inicio Visual Studio
2.) Cree un nuevo projecto de tipo "SQL Server project"
3.) Inmediatemente de Crear el proyecto le pedira connectarse con su servidor. Ingrese la informacion necesaria(usuario,password,servidor)
4.) Inmediatemente Le preguntara que si decea Habilitar el Sql/CLR Debugging, indique que si
5.)Sobre el proyecto presione click derecho busque add y luego elija Store Procedure( en el solution explorer) coloque un nombre a su nuevo store procedure(sp.vb o sp.cs)
6.)En el Sp que acaba de crear asegure de tener las siguientes Imports ó Using
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
7.) y de aqui en adelante es una Sub ó Void totalmente Normal, un ejemplo sensillo
Public Shared Sub StoredProcedure1
Dim conn As New SqlConnection("context connection=true")
conn.Open()

Dim cmd As New SqlCommand("SELECT ProductID, Name, ListPrice FROM Production.Product ORDER BY ListPrice DESC", conn)
SqlContext.Pipe.ExecuteAndSend(cmd)
End Sub

8.) Luego f5 y ya esta en sql server, pueder ir a verlo con el Management Studio en la seccion de programacion, Store procedure
puedes ejecutarlo
con un exe. Ejemplo.
exec dbo.StoredProcedure1

si te sale este error
Msg 6263, Level 16, State 1, Line 1Execution of user code in the .NET Framework is disabled. Enable "clr enabled" configuration option.
Tenemos problemas pero es por que no tiene habilitado el .net framework en el sql
corre este script para correjilo.

sp_configure 'clr enabled', 1
go
reconfigure
go
Para Probar el Sp en el mismo .net tiene que hacer los siguiente pasos:

1.) Pon un break point sobre tu Store procedure.
2.)Preciona click derecho sobre tu proyecto y agrega un TEST SCRIPT
agrega el codigo de tu prueba de script que si es al que esta arriba deberia ser asi:
exec dbo.StoredProcedure1
y preciona click derecho sobre su script de prueba en que mi caso se llama test.sql y le dices que sea el default script.
3.) preciona f5 y ahora no solo lo pasara al sql si no que hara una pausa en tu break point.
Ver