2013-03-28 20 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 –

相关问题