Cómo restablecer el valor de una columna Identity en SQL Server

Las columnas marcadas como Identity en SQL Server van incrementando de acuerdo a una seed o semilla. Normalmente empiezan en 1 y van incrementando de 1 en 1. Si has insertado, por ejemplo, 20 registros, el valor del Identity será 21. Si eliminas todos los registros e insertas uno nuevo, verás que en vez de empezar nuevamente del 1, continuará en el 21.

Hay ocasiones en las que necesitamos que el Identity vuelva a empezar en 1. Para esto, se necesita restablecer la semilla, lo cual se llama reseed.

Todos los procedimientos siguientes utilizan el comando DBCC y se hacen mediante tu editor de consultas (queries) favorito, por ejemplo Microsoft SQL Server Management Studio.

Para verificar el valor de la semilla

DBCC checkident ('NombreDeTabla')

Resultado:

Checking identity information: current identity value '20', current column value '20'.

Para reparar la semilla
Si por alguna extraña razón la semilla se corrompe, puedes repararla con el siguiente comando, el cual modificará el valor de la semilla al valor máximo que se encuentre almacenado en la columna Identity.

DBCC checkident ('NombreDeTabla', reseed)

Resultado:

Checking identity information: current identity value '20', current column value '20'.

Restablecer la semilla
Como comentaba al principio, si borraste todos los registros y necesitas reiniciar la semilla en 1, entonces emite el siguiente comando:

DBCC checkident ('NombreDeTabla', reseed, 1)

Resultado:

Checking identity information: current identity value '20', current column value '1'.

Listo, el registro siguiente que insertes tendrá un valor Identity de 1. Puedes modificar el valor 1 a cualquier otro valor que necesites en el ejemplo del último comando.

Cómo insertar valores en columnas Identity

Si intentas insertar (mediante algún software de sincronización de bases de datos o cualquier otro método) valores explí­citos en columnas marcadas como Identity, obtendrás este error:

Cannot insert explicit value for identity column in table 'MiTabla' when IDENTITY_INSERT is set to OFF

Para poder insertar valores especí­ficos en estas columnas, antes de realizar la inserción, corre esta sentencia SQL:

SET IDENTITY_INSERT MiTabla ON

Corre tu proceso de sincronización o inserción de datos, y no olvides al finalizar regresar la propiedad a su valor inicial, corriendo esta sentencia:

SET IDENTITY_INSERT MiTabla OFF

Cómo copiar un valor de un TextBox a otro usando ASP.NET y JavaScript

La situación es esta:

Tengo dos controles TextBox de ASP.NET en un formulario de captura. En la mayorí­a de los casos el usuario deberá capturar el mismo valor en ambos. Entonces quiero hacer que cuando el usuario capture el primer campo y brinque al segundo (en ese momento se dispara el evento onblur de JavaScript del primer campo) el valor capturado se copie automáticamente al segundo campo.

Para hacer esto hay que combinar el uso de ASP.NET con JavaScript de la siguiente forma.

Primero crea la función VB.NET que genera el código JavaScript:

  1. Public Function SetText(ByVal Control1 As Control, ByVal Control2 As Control) As String
  2.     'Genera codigo JavaScript que copiara el contenido del campo Control1
  3.     'al campo Control2 en el momento que el usuario salga (onblur) del Control1
  4.     Dim Script As New System.Text.StringBuilder
  5.     Dim ClientID1 As String = Control1.ClientID
  6.     Dim ClientID2 As String = Control2.ClientID
  7.     With Script
  8.         .Append("document.getElementById('")
  9.         .Append(ClientID1)
  10.         .Append("').value = ")
  11.         .Append("document.getElementById('")
  12.         .Append(ClientID2)
  13.         .Append("').value;")
  14.     End With
  15.     Return Script.ToString
  16. End Function

La función anterior puede ir en el código de tu página. Ahora, en el evento Page_Load puedes usarla así:

  1. MiTextBox1.Attributes.Add("onblur", SetText(MiTextBox1, MiTextBox2))

Código creado basándome en: http://www.mredkj.com/vbnet/TextboxScriptFunctions.html

Tres diferentes formas de hacer DataBind en ASP.NET 3

Existen tres formas de hacer DataBind en ASP.NET 3:

Eval. Es un DataBind en una sola dirección, lo que significa que obtiene el dato del DataSource pero si ocurre alguna modificación en el campo, no lo puede regresar al DataSource.

Ejemplo:

  1. <%#Eval("NombreDeLaColumna")%>

Bind. Es un DataBind de dos direcciones, lo que significa que obtiene el dato del DataSource y si ocurre alguna modificación en el campo, lo regresa al DataSource para su modificación.

Ejemplo:

  1. <%#Bind("NombreDeLaColumna")%>

Uso de una función. Es posible utilizar una función para mostrar un dato. Toma esta situación por ejemplo: En la tabla que estamos mostrando tenemos una llave foránea, que hace la relación con otra tabla. En vez de mostrar el ID numérico (por ejemplo 34) es mejor mostrar un campo alfanumérico, pero ese campo alfanumérico se encuentra en la otra tabla. Para accederlo puedes crear una función a la cual le des como entrada el ID numérico y regrese el valor alfanumérico legible para el usuario.

Ejemplo:

  1. <%# Funciones.ObtenDatoAlfanumerico(Eval("IdTabla")) %>

Es muy útil saber esto, sobre todo el tercer ejemplo.

Cómo restaurar una base de datos de SQL Server en otro servidor

Hace poco tuve que hacer un backup de una base de datos de SQL Server y restaurarla (restore) en otro servidor distinto.

Para hacer el respaldo (backup) en el servidor de origen, usando Microsoft SQL Server Management Studio Express, haces clic con el botón derecho en la base de datos y seleccionas Tasks -> Back Up...

backup.gif

Luego en la pantalla que aparece, seleccionas el tipo de backup llamado Full.

backupoptions2bis2.gif

El archivo de respaldo quedará guardado en la ruta que aparece bajo el título Destination.

Ahora descarga ese archivo al servidor donde vas a restaurar la base de datos. Por cierto, ya tiene que existir la base de datos (aunque esté vacía) para que puedas restaurar la información.

Ahora conectado al servidor destino, haz clic en la base de datos donde deseas vaciar la información y haz clic con el botón derecho y selecciona Tasks -> Restore -> Database...

restore.gif

Selecciona la opción From device, haz clic en el botón con los tres puntitos, selecciona el archivo que descargaste y verás esta pantalla (asegúrate de marcar la casilla bajo Restore):

restore3bis.gif

Ahora haz clic en Ok.

Si ves el siguiente error:

Error 3154: The backup set holds a backup of a database other than the existing 'xxxx' database

entonces haz clic en la página Options en el panel izquierdo y marca la casilla Overwrite the existing database:

restore4.gif

Y listo, con eso se restaurarán todos los elementos de tu base de datos original.

Actualización:
Lo que he visto es que el usuario que tení­as asignado a la base de datos se corrompe. Simplemente crea otro usuario con un nombre distinto y vuelve a asignarle el ownership y los permisos a la base de datos, y listo.