Mostrando entradas con la etiqueta MSSQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta MSSQL. Mostrar todas las entradas

domingo, 11 de octubre de 2015

Argument data type text is invalid for argument 1 of replace function.

La función REPLACE en MS SQL permite reemplazar en un texto una cadena de caracteres dada por otra cadena.
Por lo que pretendo usar esta función para personalizar un texto agregando un valor que obtengo de una tabla x. Al ejecutar una consulta como esta:

declare @nombre VARCHAR(15);
SET @nombre = 'Marcos';
SELECT REPLACE(Cliente, 'Cliente', @nombre) as Msg FROM Mensajes WHERE id=23;

Obtengo el siguiente error:
Argument data type text is invalid for argument 1 of replace function.

Esto funciona
declare @nombre VARCHAR(15);
SET @nombre = 'Marcos';
SELECT REPLACE('Cliente', 'Cliente', @nombre) as Msg

Donde esta el error?
El error esta en que la columna Cliente que paso como parámetro a la función REPLACE es de tipo TEXT en la base de datos, por lo que se debe pasar a VARCHAR.

SELECT REPLACE(CAST(Cliente AS VARCHAR(500), 'Cliente', @nombre) as Msg FROM Mensajes WHERE id=23;

La duda que surge ahora es: Como obtengo el numero de caracteres de un campo TEXT? les adelanto que la función LEN no va a funcionar.
Argument data type text is invalid for argument 1 of len function.

Mas Información:
https://msdn.microsoft.com/es-es/library/ms186862(v=sql.120).aspx

viernes, 24 de julio de 2015

Como violar un autonumerico en MS SQL

Supongamos que tienes una tabla de usuarios cuyo identificador es un autonumerico. Pero te entregan una lista para cargar donde los usuarios tienen un numero como identificador pero no parten del 1 y hay usuarios que no existen por ejemplo (1,2,7,8,9, etc).  Y otra condición es que después de la carga inicial, se debe seguir usando el autonumerico para la asignación de códigos partiendo de n numero.

En esos casos se pueden usar la instrucciones:
SET IDENTITY_INSERT y DBCC CHECKIDENT

SET IDENTITY_INSERT
Permite insertar valores explícitos en la columna identidad de una tabla.

DBCC CHECKIDENT
Comprueba el valor de identidad actual de la tabla especificada, si fuera necesario, lo cambia. También puede utilizar DBCC CHECKIDENT para establecer manualmente un nuevo valor de identidad actual para la columna de identidad.

Sintaxis SET IDENTITY_INSERT
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }


Donde
  • database_name : nombre de la base de datos
  • schema_name : nombre del esquema
  • table  : nombre de la tabla


Ejemplo de uso
SET IDENTITY_INSERT [dbo].[Tu_tabla] ON
INSERT INTO Tu_tabla (3,...)
SET IDENTITY_INSERT [dbo].[Tu_tabla] OFF

La segunda parte del requerimiento de dejar establecido desde que numero se generaran los autonumerico se puede hacer con la instruccion: DBCC CHECKIDENT

Sintaxis
DBCC CHECKIDENT  (table_name [, { NORESEED | { RESEED [, new_reseed_value]}}])
[ WITH NO_INFOMSGS ]

Donde
  • table_name : nombre de la tabla
  • NORESEED : Especifica que el valor de identidad actual no se debe cambiar.
  • RESEED : Especifica que el valor de identidad actual se debería cambiar.
  • new_reseed_value : Es el nuevo valor que se va a usar como valor de identidad actual de la columna de identidad.\
  • WITH NO_INFOMSGS : Suprime todos los mensajes de información.
Ejemplo de Uso:

Para saber el valor identidad
DBCC CHECKIDENT ('Usuario', NORESEED)

Para poner como valor de identidad de la tabla Usuario el 100
DBCC CHECKIDENT ('Usuario',reseed,100)


Mas Información:
https://msdn.microsoft.com/es-es/library/ms188059%28v=sql.120%29.aspx
https://msdn.microsoft.com/es-es/library/ms176057(v=sql.120).aspx

martes, 9 de diciembre de 2014

Crear una tabla desde un Select (MS SQL)

En el siguiente código,  muestro como crear una tabla a partir de un SELECT en MS SQL.

Creo dos campos de tipo integer (id_cla e id_con) un campo varchar (Observacion_log) y un campo de Fecha (Fecha_log)

En el campo varchar se creará del largo del  string que le pase entre comillas.  En este caso varchar(3).


select 1 as id_cla , 2 as id_con , 'msg' as Observacion_log , getdate() as Fecha_log into Log 


 


miércoles, 3 de diciembre de 2014

Script para exportar estructura y datos MS SQL 2012

Alguien me pregunto como se hacia en MS SQL para exportar un script con la estructura de las tablas (CREATE) y los datos (INSERT). Por lo que me di cuenta que no era tan evidente hacerlo, de modo que lo dejo por acá para quien este en la misma duda.

Primero estando en el Management Studio seleccionar la base de datos que se necesita crear un script. Presionar botón derecho y elegir Tasks, posteriormente elegir Generar Script. Lo demas es practicamente aceptar aceptar. Salvo si lo que quieres es obtener un script para determinados elementos de la base o agregar insert de datos ya que por defecto viene para generar solo la estructura.
 Por ultimo te permite seleccionar si quieres el resultado en el portapapeles , un archivo o un nuevo tab en el Management Studio.


 
Se puede seleccionar toda la base o seleccionar elementos.

 

Donde quieres el resultado. Un archivo en alguna carpeta, un archivo por cada objeto. Poner el resultado en el portapapeles, o una nueva ventana dentro del Management Studio.

  

En types of data to script da 3 opciones: esquema y datos , solo el esquema o solo datos. Para llegar aca se debe presionar el boton Advanced de la ventana anterior.



lunes, 1 de diciembre de 2014

Error del proveedor subyacente en Open.

Tengo un proyecto en ASP.NET MVC 4 con Entity Framework  5 que estoy publicando en un servidor de pruebas. Pero cuando cambio la cadena de conexión y posteriormente trato de logearme en la aplicación  me aparece el siguiente mensaje tanto en la maquina de desarrollo como en la de pruebas.

Error del proveedor subyacente en Open.
( The underlying provider failed on Open. )

Al debuggear encuentro este mensaje (EntityException was caught) pareciera que quien esta provocando problemas es el Entity Framework.



La forma de resolver esto en desarrollo es eliminando la cadena de conexion modificada y volver a cargar el modelo, pero esto no es valido para el servidor de pruebas.

Pero al revisar mas en detalle la informacion del debuger encuentro que mi problema son permisos del usuario en la base de datos de pruebas. No tiene permisos para hacer SELECT. plop :(

Se denegó el permiso SELECT en el objeto 'xxx', base de datos 'xxx', esquema 'dbo'.
 

Le doy permisos al usuario y sigo con mi instalacion en pruebas.





martes, 11 de noviembre de 2014

Invalid use a side-effecting operator 'INSERT' within a function.

Cree una funcion, que hace una serie de consultas y retorna un valor. Pero de entre esas consultas se me ocurrio que podria actualizar una tabla y fue ahy donde me encontre con este error:

Invalid use a side-effecting operator 'INSERT' within a function.



¿La razon del error?
En una funcion no se puede realizar acciones que modifiquen el estado de la base de datos. Para eso se debe crear un Procedimiento Almacenado.

Fuente:
http://stackoverflow.com

http://technet.microsoft.com

martes, 20 de diciembre de 2011

ISNULL EN ORACLE - Reemplazar valores nulos



Tengo mas experiencia trabajando en MS SQL y en MYSQL que en Oracle (soy novato) por lo mismo al momento de necesitar hacer algo se me viene a la mente como es en MS SQL / MYSQL y pienso que puede haber varios en una situación similar.

En MS SQL existe la función ISNULL para reemplazar valores nulos, ejemplo:
SELECT Campo1, ISNULL(Campo2, '0') FROM Tabla 


En MySQL la función es:
SELECT Campo1,  COALESCE (Campo2, '0') FROM Tabla 


En Oracle, la función es NVL, ejemplo:
SELECT Campo1, NVL(Campo2, '0') FROM Tabla 


Lo que hacen estas funciones es reemplazar el valor nulo si existe por el que se le indica.













jueves, 24 de febrero de 2011

Tamaño de una Base de Datos MS SQL


Para conocer el tamaño de una base de datos en MS SQL se puede usar el comando sp_spaceused.

Se puede usar:

use BaseDeDatos
sp_spaceused
(Muestra el tamaño de la base de datos actual)

sp_spaceused Tabla
(En este caso muestra el tamaño de una tabla)

Mas Información:
http://msdn.microsoft.com/es-es/library/ms188776(v=sql.90).aspx