0

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

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

4

1 回答 1

2

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

您可能遇到的唯一问题是您是否真的想返回长度超过 3 的字符。

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

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

于 2013-03-28T18:12:59.300 回答