2010-08-25 19 views
15

Si hace clic derecho sobre una tabla en SQL Server Management Studio y seleccione 'mesa de escritura como> Crear para> Nueva ventana Editor de consultas' el código que aparece contiene:SQL Server

SET ANSI_PADDING EN

.... crear la tabla ...

ANSI_PADDING SET OFF

lo tanto, supongo, si ANSI_PADDING está encendido o apagado afecta a toda la base de datos y que se enciende para crear una tabla y luego se volvió de nuevo ?

¿Qué ocurre si crea una tabla con ANSI_Padding off? ¿Cómo puedes activarlo para esa mesa?

+0

último comentario, pero quiero compartir mis hallazgos al buscar el tema relacionado http: // sqlmag.com/blog/sql-server-management-studio-s-feo-ansipadding-error –

Respuesta

10

SET ANSI_PADDING controla la forma las tiendas de columna valores más corto que el tamaño definido de la columna, y la forma en las tiendas de columna valores que tienen blancos de cola en char, varchar, binary, y varbinary datos.

En una versión futura de MicrosoftSQL servidor ANSI_PADDING se siempre estar encendido y todas las aplicaciones que establecer explícitamente la opción de apagado se producir un error. Evite utilizar esta característica en el nuevo trabajo de desarrollo, y el plan para modificar las aplicaciones que utilizan actualmente esta función.

Esta configuración solo afecta a la definición de nuevas columnas. Después de crear la columna, SQL Server almacena los valores según la configuración cuando se creó la columna. Las columnas existentes no se ven afectadas por un cambio posterior a esta configuración.

+0

Gracias por su respuesta. Estoy confundido. Por un lado, usted dice que esto solo afecta la definición de nuevas columnas, mientras que la respuesta anterior dice que afecta cómo se recuperan los datos en tablas completas. –

+0

@MikeWilson: Ambas respuestas son correctas. El texto citado anteriormente es ligeramente engañoso en cuanto se refiere al uso de SET ANSI_PADDING en DDL en lugar de DML. –

+0

lo tanto, si ANSI_PADDING debe estar encendido, debería hacerlo ... cuando selecciono 'mesa de escritura como> Crear para> Nueva ventana Editor de consultas' y el código que aparece contiene: SET ANSI_PADDING EN .... crear la tabla ... CONFIGURAR ANSI_PADDING OFF ... eliminar 'SET ANSI_PADDING OFF'? ¿Por qué SQL Server genera SET ANSI_PADDING OFF 'si siempre debe estar activado? Estoy usando 2008 por cierto. –

6

lo tanto, supongo, si ANSI_PADDING está encendido o apagado afecta a toda la base de datos y que se enciende para crear una tabla y luego se volvió de nuevo?

no, la opción SET solo afecta el contexto de su conexión, si entran 2 conexiones y una tiene desactivada ANSI_PADDING y la otra ON no afecta a la otra conexión. Sin embargo ... la tabla creada en una conexión tendrá el comportamiento que la configuración le hizo.

leer más aquí http://msdn.microsoft.com/en-us/library/ms190356.aspx

lo tanto, si la conexión 1 se presenta en conjunto con ANSI_NULLS fuera continuación select * from bla where col = null funcionará

Sin embargo, esto no va a funcionar para la conexión 2 si se trata de establecer con los ansi_nulls por defecto (eN)

se puede ver lo que está por cualquiera de las configuraciones de ejecución dbcc useroptions o si usted está en 2005 y hasta

SELECT SPID,VALUE,ANSI_SETTING 
FROM (
SELECT @@SPID AS SPID, 
CASE quoted_identifier 
WHEN 1 THEN 'SET' ELSE 'OFF' END QUOTED_IDENTIFIER, 
CASE arithabort 
WHEN 1 THEN 'SET' ELSE 'OFF' END ARITHABORT, 
CASE ansi_null_dflt_on 
WHEN 1 THEN 'SET' ELSE 'OFF' END ANSI_NULL_DFLT_ON, 
CASE ansi_defaults 
WHEN 1 THEN 'SET' ELSE 'OFF' END ANSI_DEFAULTS , 
CASE ansi_warnings 
WHEN 1 THEN 'SET' ELSE 'OFF' END ANSI_WARNINGS, 
CASE ansi_padding 
WHEN 1 THEN 'SET' ELSE 'OFF' END ANSI_PADDING, 
CASE ansi_nulls 
WHEN 1 THEN 'SET' ELSE 'OFF' END ANSI_NULLS, 
CASE concat_null_yields_null 
WHEN 1 THEN 'SET' ELSE 'OFF' END CONCAT_NULL_YIELDS_NULL 
FROM sys.dm_exec_sessions 
WHERE session_id = @@SPID) P 
UNPIVOT (VALUE FOR ANSI_SETTING IN(
QUOTED_IDENTIFIER,ARITHABORT,ANSI_NULL_DFLT_ON, 
ANSI_DEFAULTS,ANSI_WARNINGS, 
ANSI_PADDING,ANSI_NULLS,CONCAT_NULL_YIELDS_NULL 
) 
) AS unpvt