2015-09-25 86 views
0

我在我的C#代碼中發生錯誤,並且在調試後發現 這是因爲在表中的條目中存在尾隨空格。 例如「AAA」SQL表尾隨空格導致錯誤

在我的C#代碼

現在嘗試設置組合框的選定值這個(組合框與「AAA」的價值的項目和失敗。

顯然,解決的方法是修復DB 'AAA'

現在我去到DB

,並做到這一點:

Select * from mytable 
where Name='aaa' 

我得到的名稱'aaa'

Select * from mytable 
where Name='aaa  ' 

我再次得到名稱'aaa'

Select len(name) from My table 
where name ='aaa' 

我得到3

我的問題是:如何查詢我知道它有 'AAA' 的額外空間的表?

+0

這是它如何工作的SQL Server中。 –

+0

因此,我無法查看錶格數據並檢查它是否有拖尾空格? –

+2

https://support.microsoft.com/zh-cn/kb/316626 SQL Server遵循ANSI/ISO SQL-92規範(第8.2節,<比較謂詞>,常規規則#3),瞭解如何將字符串與空格進行比較。 ANSI標準要求在比較中使用填充字符串,以便在比較它們之前匹配它們的長度。填充直接影響WHERE和HAVING子句謂詞的語義以及其他Transact-SQL字符串比較。例如,對於大多數比較操作,Transact-SQL認爲字符串'abc'和'abc'是等價的。 –

回答

3

SQL服務器len函數不包括尾隨空白。

考慮使用不修剪字符串的DATALENGTH(Transact-SQL)函數。

因此,您可以檢查是否datalength(column) <> datalength(rtrim(column))找到它是否包含尾隨空格。

注意:如果處理一個unicode字符串,DATALENGTH將返回兩倍的字符數。

+0

是的。這就是答案。 –

1

正如Giorgi Nakeuri所解釋的,'a        '和'a'被認爲是相等的。但是你可以很容易地找到LIKE尾隨空格:

select * from mytable where name like '% '; 

這裏是如何更新:

update mytable set name = rtrim(name) where name like '% ';