2010-08-25 111 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