SQL Server ANSI_Padding
Если я щелкнул правой кнопкой мыши по таблице в SQL Server Management Studio и выберите таблицу Script как > Создать в > Окно редактора новых запросов ", код, который появляется, содержит:
УСТАНОВИТЬ ANSI_PADDING ON
.... создайте таблицу...
SET ANSI_PADDING OFF
Итак, я думаю, включен или отключен ANSI_Padding для всей базы данных, и он включен для создания таблицы, а затем снова выключен?
Что произойдет, если вы создадите таблицу с ANSI_Padding? Как вы можете включить его для этой таблицы?
Ответы
Ответ 1
SET ANSI_PADDING Управляет способом столбец сохраняет значения короче, чем определенный размер столбца и как столбец хранит значения, которые имеют завершающие пробелы в char
, varchar
, binary
и varbinary
.
В будущей версии сервера MicrosoftSQL ANSI_PADDING будет всегда быть включенными и любыми приложениями, которые явно установите параметр OFF вызвать ошибку. Избегайте использования этого в новых разработках и планировать изменение приложений, которые в настоящее время используют эту функцию.
Этот параметр влияет только на определение новых столбцов. После создания столбца SQL Server сохраняет значения в соответствии с настройкой при создании столбца. Существующие столбцы не зависят от более позднего изменения этого параметра.
Ответ 2
Итак, я думаю, включен или отключен ANSI_Padding для всей базы данных, и он включен для создания таблицы, а затем снова выключен?
нет, опция SET влияет только на контекст вашего соединения, если подключены 2 соединения, а один ANSI_PADDING OFF, а другой ON, они не влияют на другое соединение. Однако... таблица, созданная в одном соединении, будет иметь поведение, которое было для нее выполнено.
подробнее здесь http://msdn.microsoft.com/en-us/library/ms190356.aspx
Итак, если соединение 1 входит с установленным ansi_nulls off
то select * from bla where col = null
будет работать
это, однако, не будет работать для соединения 2, если оно поставляется с настройкой по умолчанию ansi_nulls (ON)
вы можете видеть, какие настройки вы выполняете либо с помощью dbcc useroptions
, либо если вы находитесь в 2005 году и
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