如果我右键单击中的一个表,并选择'Script table as > Create to > New Query窗口‘,则显示的代码包含:
将ANSI_PADDING设置为
……创建桌子..。
启动ANSI_PADDING
因此,我猜,ANSI_Padding是打开还是关闭影响整个数据库,然后打开创建一个表,然后再次关闭?
如果您创建一个关闭ANSI_Padding的表,会发生什么情况?你怎么能为那张桌子打开它?
发布于 2010-08-25 14:36:58
填充物控制列存储值的方式短于定义的列大小,以及列在
char
、varchar
、binary
和varbinary
数据中存储有尾随空格的值的方式。 未来版本的服务器ANSI_PADDING将始终处于打开状态,任何显式将选项设置为OFF的应用程序都将产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
此设置仅影响新列的定义。创建列后,Server将根据创建列时的设置存储值。现有列不受以后对此设置的更改的影响。
发布于 2010-08-25 14:40:10
因此,我猜,ANSI_Padding是打开还是关闭影响整个数据库,然后打开创建一个表,然后再次关闭?
不,SET选项只影响连接的上下文,如果两个连接进来,一个连接关闭了ANSI_PADDING,另一个连接没有影响另一个连接。在一个连接中创建的However....the表将具有设置对其所做的行为。
在这里阅读更多http://msdn.microsoft.com/en-us/library/ms190356.aspx
因此,如果连接1与set ansi_nulls关闭,那么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
https://stackoverflow.com/questions/3566948
复制相似问题