输入比函数参数表SQL更多的字符

时间:2013-03-28 18:09:40

标签: sql sql-server tsql user-defined-functions

我有这个我正在玩的代码片段(原谅通用名称):

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参数(当然,除了字符串末尾的数据丢失之外),是否会发生任何潜在的肮脏事件

1 个答案:

答案 0 :(得分:2)

由于您将参数限制为3的长度,因此完全忽略了其他字符。

唯一可能的问题是,如果你真的想要返回长度超过3的字符。

例如,您传入1234567并且您实际上想要整个值,您将只获得123

如果要将输入参数限制为3,则没有理由尝试传入更长的值。如果您有可能传入更长的值,则应增加参数的长度。