2013-03-28 19 views
0

我有這樣的代碼片段,我跟打(原諒的通用名稱):在多個字符輸入不是函數參數表的SQL

create function GetList 
(@d1 varchar(3), @d2 varchar(3), @d3 varchar(3)) 
returns table 
as 
return 
with List 
as 
(
    select x.pattern 
     from (values (@d1), (@d2), (@d3)) as x(pattern) 
) 
select * from list 

這最終將是一個用戶提供的名單,他們將用於查詢其他東西,但玩這個讓我好奇。如果我是運行

select * from GetList('1111111','222','333')

我會得到相同的結果,如果我只在3個字符每個輸入。由於我將varchar參數限制爲字符,其他字符是否完全被忽略?如果我有一個像這樣「溢出」的varchar參數,可能會發生任何潛在的不良情況(當然,除了字符串末尾的數據丟失外)

回答

2

其他字符完全被忽略,因爲您限制該參數的3

唯一的問題的長度,你可以擁有的,如果你真的想回去是超過3

例如長度的字符,你在1234567傳遞和你實際想要整個價值,你只會得到123

如果您將輸入參數限制爲3,則沒有理由嘗試傳入較長的值。如果您有機會傳遞更長的值,那麼您應該增加參數的長度。

+0

謝謝,我不知道是否有可能發生的一些常見的溢出錯誤。我這樣做的原因是'永遠不會低估用戶類型的情況:)。另外,我很好奇會發生什麼。 – wootscootinboogie

+1

@wootscootinboogie如果你有用戶輸入的值,你可以做的一件事情,如果確保他們只能輸入3個字符。您可以使用子字符串等來糾正長度。 – Taryn

+0

除非您不關心其餘部分,只是簡單地將其截斷爲3 –

相關問題