SQL - Dudita TONTA de sql

 
Vista:

Dudita TONTA de sql

Publicado por Ariasss (18 intervenciones) el 23/06/2008 18:22:35
Bien... Gracias de antemano por vuestro tiempo.
Tengo una BB.DD con dos campos tal que así:
Tabla pruebaxml
Número Texto

En principio está vacía y lo que quiero hacer es que cada vez que se introduzca algo en el atributo Texto, en el Número se añada un valor (es el identificador) correlativo, es decir,

Número Texto
1 Esto es una prueba
2 Esto es una prueba 2
...

Bien, estoy trabajando con C# y ASP.NET... y os digo como lo estoy haciendo...
Creo una variable que te mire el máximo número de la columna Número así:

SELECT max(Número) from pruebaxml; -- Esta consulta funciona perfectamente
y la guardo en una variable de tipo entero

int sqlnumero = SELECT max(Número) from pruebaxml;

NMe dice que no puede convertir implícitamente del tipo string a int....

Y luego, hago string sQuery2 = "INSERT INTO pruebaxml (Numero) VALUES ('" + sqlnumero+1 + "')";

Bueno, pues ese fallilto me da y esa es la idea que tengo...

P.D.: Valdría esa consulta si la tabla está vacía??? Es decir, si a NULL lo sumas 1 te da 1, o no? O tendría que diferenciar casos.... Si la tabla está vacía insertar 1, sino está vacía, como lo esoty haciendo yo...
Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Dudita TONTA de sql

Publicado por Eduardo (3 intervenciones) el 23/06/2008 21:08:45
No es mejor colocar ese campo numero de tipo autonumerico, serial, secuencia, etc.

El cual no te debas preocupar porque siempre estos datos se guarda el siguiente siempre que haces un insert
sin necesidad de señalarlos o hacer calculos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dudita TONTA de sql

Publicado por pacopaz (143 intervenciones) el 23/06/2008 21:43:56
Es cierto lo que dice Eduardo, sin embargo, algunas personas (yo incluido) a veces requerimos que la secuencia no salte valores, esto, por que en algunas ocasiones necesitamos borrar un registro recién ingresado y generar uno nuevo nos hace perder un número.
Si bien es cierto que mucha de mi implementación la he mudado a GUID, también es cierto que es mucho más facil referenciar un registro por número.
Para el caso de Arias, voy a suponer que la consulta es sobre sql server:

select
case
when max(Numero) is Null then 1
else max(Numero)+1
end as Siguiente
from
pruebaxml

Esto traerá el siguiente valor de Número (no el máximo, sino el que le sigue) incluso para cuando la tabla no tenga valores.
Ahora, con respecto a tu implementación en vb, hay que abrir una conexión, esta ligarla a un comando que al ejecutarse devuelva el valor a un recordset y al leer este, asígnado a una variable entera. Luego, cuando hagas el insert, hay que cambiarlo a tipo strig, para que lo puedas poner en el query de inserción. Esto, no por que lo mandes como char, sino por que el query es un string.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dudita TONTA de sql

Publicado por Ariasss (18 intervenciones) el 24/06/2008 11:38:57
Lo estoy haciendo tal que así:

string sqlnumero = "SELECT CASE WHEN max(Numero) is Null then 1 else max(Numero)+1 end as Siguiente FROM pruebaxml ";
string sQuery2 = "INSERT INTO pruebaxml(Numero, Texto) VALUES ('Siguiente','" + tepi[0].InnerText + "')";
SqlConnection SqlConn = new SqlConnection(connectionString);
SqlConn.Open();
SqlCommand com = new SqlCommand(sQuery2, SqlConn);
SqlDataReader reader2 = com.ExecuteReader();
SqlConn.Close();

Si es así, me da error en lo siguiente:
Error de conversión al convertir el valor varchar 'Siguiente' al tipo de datos int.

¿Qué se os ocurre que puede estar fallando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dudita TONTA de sql

Publicado por Arias (18 intervenciones) el 24/06/2008 11:34:41
Por cierto, para hacerlo autonumérico, yo estoy utilizando el Sql Server 2.005... ¿En qué opción tengo que poner ese atributo? Porque claro, lo tenía puesto en int, pero ahora no sé en qué ponerlo para hacer lo que me dice el amigo Eduardo...
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dudita TONTA de sql

Publicado por Ariasss (18 intervenciones) el 25/06/2008 10:47:34
Vale, ya está... Como con la consulta no me funcionaba (MUCHAS GRACIAS PACOPAZ POR RESOLVERME YA DOS DUDAS), probé con poner el autonumérico... y va de fábula... En la opción de Sql Server 2.005, cuando declaras un campo de un tipo, pues abajo, hay que poner la ESPECIFICACIÓN DE IDENTIDAD en SI, y así te va aumentando el sólito de uno en uno...

GRACIAS A TODOS...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar