比如 select @status = N'stopped'
那麼其中的字元串 stopped 前面為什麼要加 N 呢?而且我們發現有些地方加 N 與否都沒有影響,有些地方又必須加 N。
N 在這裡表示 Unicode,就是雙位元組字元。對于西文字元,用一個位元組來存儲過足夠了,對于東方文字字元,就需要兩個位元組來存儲。Unicode 為了統一、規範、友善、相容,就規定西文字元也用兩個位元組來存儲。
也就是說加 N 就表示字元串用 Unicode 方式存儲。
但有時候加與不加都一樣,又是什麼原因呢?這是由于自動轉換造成的。
比如:
declare @status nvarchar(20)
select @status = N'stopped'
select @status = 'stopped'
實際上上述兩句指派的結果是一樣的,因為變量類型就是 nvarchar(Unicode 類型)。
而有些地方(比如:sp_executesql 的參數)不能自動轉換,是以需要加 N 了。