我有这个我正在玩的代码片段(原谅通用名称):
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参数(当然,除了字符串末尾的数据丢失之外),是否会发生任何潜在的肮脏事件
答案 0 :(得分:2)
由于您将参数限制为3的长度,因此完全忽略了其他字符。
唯一可能的问题是,如果你真的想要返回长度超过3的字符。
例如,您传入1234567
并且您实际上想要整个值,您将只获得123
。
如果要将输入参数限制为3,则没有理由尝试传入更长的值。如果您有可能传入更长的值,则应增加参数的长度。