SQL Server - Campos TEXT sql server

   
Vista:

Campos TEXT sql server

Publicado por andres (9 intervenciones) el 13/04/2016 19:59:08
Buenas. Tengo el siguiente problema:

Estoy trabajando en Visual Basic 6.
Necesito poder guardar en una base de datos SQL Server texto de grandes dimensiones. (mas grandes de lo que un campo Varchar soporta)
Googleando vi que la mejor opción es utilizar un campo TEXT el problema es que me tira error de desbordamiento.
La función es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Function SaveNewOject(Byval Soporte as string) As Boolean
 Dim AdoCmd As New Command
 
  On Error GoTo ErrHandler
  With AdoCmd
    .CommandType = adCmdStoredProc
    .CommandTimeout = 90
    .ActiveConnection = gAdoCn
 
    .CommandText = "SPSave"
 
    .Parameters.Refresh
    .Parameters("@Soporte").Value = Soporte
 
    .Execute
  End With
 
  Set AdoCmd = Nothing
  SaveNewOject = True
  Exit Function
 
 ErrHandler:
  Set AdoCmd = Nothing
  Err.Raise Err.Number, , Err.Description
End Function

Alguna idea?

Saludos
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
Imágen de perfil de Isaias

Campos TEXT sql server

Publicado por Isaias (3186 intervenciones) el 13/04/2016 20:18:21
¿Mas que lo que soporta un VARCHAR(MAX) 2,147,483,647?
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

Campos TEXT sql server

Publicado por andres_fontan (9 intervenciones) el 13/04/2016 20:21:30
un campo varchar soporta como maximo 8000 caracteres. no se de donde sacas esa cifra
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
Imágen de perfil de Isaias

Campos TEXT sql server

Publicado por Isaias (3186 intervenciones) el 13/04/2016 20:33:45
Y yo te sugeri un VARCHAR(MAX), que soporta 2,147,483,647 de caracteres, ¿Que version es tu SQL Server?
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

Campos TEXT sql server

Publicado por andres_fontan (9 intervenciones) el 13/04/2016 20:40:21
Estoy usando SQL server 2005

aa mirá. no sabia eso. yo pense q soportaba hasta 8000 caracteres y si le ponias MAX era lo mismo que poner 8000.
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
Imágen de perfil de Isaias

Campos TEXT sql server

Publicado por Isaias (3186 intervenciones) el 13/04/2016 20:52:48
Tiene razon "respondiendo comentarios absurdos", son BYTES

Pongo la informacion tomada directamente del BOL:

varchar [ ( n | max ) ]

Datos de cadena no Unicode de longitud variable. n define la longitud de la cadena y puede ser un valor entre 1 y 8.000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. Los sinónimos ISO de varchar son char varying o character varying.

Consulta:

https://technet.microsoft.com/ES-ES/library/ms176089%28v=sql.110%29.aspx

En resumen, en un VARCHAR(MAX), podrias almacenar hasta un maximo de 2GB
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

Campos TEXT sql server

Publicado por Respondiendo comentarios absurdos (1 intervención) el 13/04/2016 20:39:52
Con razón no encuentras solución a tu problema...

Deberías estudiar las tecnologías que vas a usar antes de meter mano.

1º No dices que version de SQL estas usando.

2º Un varchar(max) como te lo dijeron, no es lo mismo que el varchar que tu haces referencia

3º Cualquier programador, aun aficionado, sabe que si le dicen que un varchar(max) soporta 2,147,483,647.... ESTÁ EN BYTES... BYTES... BYTES..... NO SON CARACTERES.

Estudiando un poco de informática lo primero que te enseñan es... bit, byte, megabyte, etc.... etc.

Si ningún campo de texto soporta lo que vas a necesitar guardar, tendras que usar mas de un campo o fila... debiendo dividir el texto que le envíes.
Para esto, debes antes saber cuando es lo máximo de caracteres que soporta tu campo, luego vía programación, te haces una clase y divides el campo según el tamaño máximo permitido, siempre que este exceda dicho limite.
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

Campos TEXT sql server

Publicado por andres_fontan (9 intervenciones) el 13/04/2016 20:57:44
Claramente se que esta hablando de una cifra expresada en bytes, nunca dije lo contrario. pregunté ya que 2,147,483,647 bytes no son 8000 caracteres.
Y te comento que no soy aficionado en la materia. Yo soy de los que prefieren aprender metiendo mano, no necesito fumarme un curso de SQL ni nada, pero te agradezco el consejo.
Volviendo al tema, sabia que existía la opción MAX a la hora de crear el campo pero nunca la utilicé.
Pruebo de esa forma y les comento.

Gracias por sus respuestas
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

Campos TEXT sql server

Publicado por andres_fontan (9 intervenciones) el 13/04/2016 21:25:46
Les comento que declare un campo como nvarchar(max) y probé guardar mediante la funcion ya mencionada creada en una clase de vb6.
Si se fijan esa funcion invoca un stored procedure que es el que realiza el insert en la tabla. sigo sin poder guardar. el mensaje que me tira es el siguiente:

"[Microsoft][ODBC SQL Server Driver]Datos tipo String, se truncarán por la derecha"

Estoy intentado guardar un string de una longitud de 11734 caracteres
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
Imágen de perfil de Isaias

Campos TEXT sql server

Publicado por Isaias (3186 intervenciones) el 14/04/2016 00:13:25
Compañero, nos dices cual es el error, pero no podemos adivinar cuando es que se dispara y me explico
1
2
3
DECLARE @mychar varchar(20)
 
SELECT @mychar  = Nomclie from cliente where clienteid = 30

En este pequeño t-sql me enviara el mismo mensaje de error, si el nombre del cliente sobrepasa los 20 caracteres

Entonces, no sabemos en que momento realmente se esta disparando el error (tu error)
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

Campos TEXT sql server

Publicado por andres_fontan (9 intervenciones) el 14/04/2016 16:42:25
Buenas. El error se dispara en el .execute de la función que detalle en el post.
No estoy haciendo un select, estoy haciendo un insert desde una función hecha en una clase de Visual Basic 6 la cual invoca a un Stored Procedure.

Estuve haciendo un par de pruebas, si ejecuto el procedure directamente desde el managger de la BDD funciona bien, me inserta el campo, el problema se da cuando lo intento hacer desde visual basic 6
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
Imágen de perfil de Isaias

Campos TEXT sql server

Publicado por Isaias (3186 intervenciones) el 14/04/2016 21:42:16
Bueno, entonces bajo esa premisa, SQL Server esta trabajando de forma correcta, el problema lo tienes en VISUAL BASIC y como desconocemos la FUNCION, seria bueno que trasladaras tu pregunto al grupo donde se habla referente a programacion o desarrollo con visual basic.
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

Campos TEXT sql server

Publicado por andres_fontan (9 intervenciones) el 14/04/2016 22:12:28
Sip. se ve que es con visual basic el tema.
Mando la pregunta para allá.

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