SQL Server: No regresa el texto completo en las celdas con valores tipo texto, modificar php.ini

Siguiendo con el tema del truncado de caracteres en SQL desde nuestra aplicación de PHP del post anterior, resulta que la solución también se puede hacer con el comando SQL.

SET TEXTSIZE NUMERO_CARACTERES_A_OBTENER

Pero igual si queremos algo más permanente, solo es cosa de modificar nuestro archivo PHP.ini, las lineas donde tengamos:

; Valid range 0 – 2147483647. Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 – 2147483647. Default = 4096.
;mssql.textsize = 4096

Por lo general están comentadas estas lineas, solo es cosa de descomentarlas y poner el valor que deseemos, reiniciamos apache y listo 🙂

SQL Server: No regresa el texto completo en las celdas con valores tipo texto

Si tienes un campo de tipo texto, ya sea cualquiera de los siguientes tipos de datos:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • text
  • ntext
  • image

Y cuando realizas tu select, no te regresa la información completa, entonces lo que debes de hacer es incrementar el limite de la variable textsize.

Para saber cual es el límite actual solo ejecuta el siguiente comando:

SELECT @@TEXTSIZE

Casi por default te dará un valor de 2147483647 (caracteres)

Y entonces la solución antes de ejecutar tu consulta SELECT, debes de iniciar con la siguiente consulta SQL.

SET TEXTSIZE NUMERO_CARACTERES_A_OBTENER

Digamos que deseas obtener unos 200 caracteres, entonces ejecutas SET TEXTSIZE 200 ,seguido de tu sentencia SQL del SELECT.

SQLServer: Error al comparar 2 campos con diferente collation (idioma)

Si estas comparando 2 tablas de diferentes bases de datos, y cada una tiene su propio idioma o collation como lo llama Microsoft (la vda no se bien que signifique pero es algo del encoding). y pues te sale este mensaje:

SQL EXecution Error.
Executed SQL statement: SELECT * FROM tabla…..
Error Source: .Net SqlCliente Data Provider
Error Message: Cannot resolve the collation conflict between
“Modern_Spanish_CI_AS” and “SQL_Latin1_General_CP1_CI_AS” in the equal to operation.

LA solución es poner en tu WHERE el tipo de collation que quieres utilizar para que haga la conversión SQL Server, teniendo algo como esto:

SELECT * FROM tabla, tabla2 WHERE tabla1.campo1 COLLATE Modern_Spanish_CI_AS = tabla2.campo2 COLLATE Modern_Spanish_CI_AS

Bueno la consulta no es la mejor! tendria que esta en un INNER JOIN pero jeje, este no es el tema., y listo! la consulta ya funciona., no se si luego existan problemas con acentos o caracteres raros, pero para texto casi normal, no debería de fallar.

No existe offset (antes decia: LIMIT) en MS SQL Server

Así como suena el titulo, en Microsoft SQL Server no existe la función limit , para implementarla tienes que usar algunos trucos con subconsultas., algo tan sencillo en MySQL como: SELECT * FROM miTabla LIMIT 2,10 en SQL Server se vuelve una calamidad.

Buscando en Internet, encontré en Foros del Web una explicación de como hacer funcionar, se tiene que poner una subconsulta SQL con algo que diga: ROW_NUMBER() OVER (ORDER BY campo) as NumRows y despues se hace un WHERE con su respectivo Between para poner el limite: WHERE NumRows BETWEEN 2 AND 10

Aca un ejemplo más elaborado:

SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY mi_Campo1) AS NumRows, *
FROM mi_Tabla
) as AS_NumRows
WHERE AS_NumRows.NumRows BETWEEN 10 AND 20

Si se requiere algún WHERE en nuestra consulta SQL se debe de meter en la subquery, en caso que no tengamos ningun campo a ordenar se cambia lo que tiene ROW_NUMBER, ORDER BY por la siguiente información:

ROW_NUMBER() OVER (ORDER BY (SELECT 1))

Y listo!.., no he probado el rendimiento pero pues aquí una solución extra.

SqlServer: Error al guardar los cambios de una tabla previamente creada

Desde que he usado Microsoft SQLServer siempre me ha dado el problema de cuando tengo una tabla ya creada y despues quiero modificar algun campo ya existente me dice que no se puede guardar:

Saving changes is not permitted. The changes you have made require the following tables to be dropped an re-created. You have either made changes to a table that can’t be re-created or enabled option Prevent saving changes that require the table to be re-created

Y bueno, pues lo que hacia antes era volver a crear otra tabla, ponerle un nombre temporal, eliminar la anterior y luego cambiar el nombre de la tabla, como ven nada eficiente., y pues la otra solución como lo indica el mensaje de error es deshabilitar la opción de prevenir cambios al guardar.

Entramos al menú: Tools > Options > Designers y quitamos la palomita del texto: Prevent saving changes that require table re-creation.

Y listo!! ya podemos modificar campos.., claro que hay que tener cuidado con los tipos de datos porque si tenemos información puede meter inconsistencias.

Error al conectar MS SQLServer mediante Localhost y 127.0.0.1

Intentaba conectarme al servidor Microsoft SQL Server mediante el nombre localhost y me marcaba que no tenia acceso, luego intente con la IP 127.0.0.1 y nada, el mismo error, pero si ponia el nombre completo de la maquina + el nombre (LAP/SQLEXPRESS) del servidor SQLServer ahí si podia ingresar!,

TITLE: Connect to Server
——————————
Cannot connect to localhost.
——————————
ADDITIONAL INFORMATION:
Error relacionado con la red o específico de la instancia mientras se establecía una conexión con el servidor SQL Server. No se encontró el servidor o éste no estaba accesible. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para admitir conexiones remotas. (provider: Proveedor de canalizaciones con nombre, error: 40 – No se pudo abrir una conexión con SQL Server) (Microsoft SQL Server, Error: 2)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=2&LinkId=20476

Investigando sobre el error, me encuentro que se tiene que activar la opción TCP/IP y agregar el puerto correspondiente al SQLServer, para hacer estos cambios ingresar en:

Inicio > Programas > Microsoft SQL Server 2008 R2 > Configuration Tools > (Aquí depende de tu versión del SQL Server)
Sql Server Configuration Manager > SQL Server Network Configuration > Protocols for SQLEXPRESS > TCP/IP
Botón derecho, propiedades y cambiar:
Protocols > Enabled = true
IP Address > IP ALL > TCP Dynamic Ports = 1433

Aceptar y luego reiniciar el servicio del SQLServer ( SQL Server Services > SQL Server (EXPRESS) > Botón derecho, reiniciar)

Y listo!., ya podemos entrar agregando la IP o el nombre localhost.