2010-08-25 62 views
15

如果我就在SQL Server Management Studio中单击一个表,然后选择 '脚本表作为>创建>新查询编辑器窗口' 出现包含代码:SQL服务器ANSI_PADDING

SET ANSI_PADDING ON

....创建表...

SET ANSI_PADDING OFF

所以,我想,ANSI_PADDING是否开启或关闭影响了整个数据库,并将其接通,以创建一个表,然后再次关闭?

如果您创建一个关闭ANSI_Padding的表,会发生什么情况?你怎么能打开这张桌子?

+0

已发表评论,但我想在搜索相关主题http:// sqlmag时分享我的发现。com/blog/sql-server-management-studio-s-ugly-ansipadding-bug – 2015-04-30 04:06:57

回答

10

SET ANSI_PADDING控制的方式 列中存储值短于 所述定义的列的大小,和 列中存储值的是 在charvarcharbinaryvarbinary数据尾随空白的方式。

在MicrosoftSQL服务器ANSI_PADDING的未来版本将 永远是和 选项明确设置为OFF的任何应用程序 产生错误。避免在新的开发工作中使用此功能,并且 计划修改 当前使用此功能的应用程序。

此设置仅影响列的定义。创建列后,SQL Server将根据创建列时的设置存储值。 现有的列不受稍后对此设置的更改影响。

+0

感谢您的回答。我很困惑。一方面,你说这只会影响新列的定义 - 而上面的anser说它会影响整个表中数据的检索方式? – 2010-08-25 15:53:02

+0

@MikeWilson:两个答案都是正确的。上面引用的文字略有误导,因为它指的是在DDL中使用SET ANSI_PADDING而不是DML。 – 2010-08-26 00:05:10

+0

所以,如果ANSI_PADDING应该是,我应该...... 当我选择“脚本表作为>创建>新查询编辑器窗口”,并在显示包含的代码: SET ANSI_PADDING ON ....创建表... SET ANSI_PADDING OFF ...删除'SET ANSI_PADDING OFF'?为什么SQL Server生成SET ANSI_PADDING OFF'如果它应该始终打开?顺便说一句,我正在使用2008年。 – 2010-08-26 09:27:47

6

所以,我想,ANSI_PADDING是否开启或关闭影响了整个数据库,并将其接通,以创建一个表,然后再次关闭?

不,SET选项仅影响连接的上下文,如果有2个连接进来,一个有ANSI_PADDING OFF,另一个ON,它们不会影响其他连接。但是......在一个连接中创建的表格将具有该设置对其执行的行为。

在这里阅读更多http://msdn.microsoft.com/en-us/library/ms190356.aspx

因此,如果连接1套进来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