输入的字符数超过函数参数表SQL

输入的字符数超过函数参数表SQL,sql,sql-server,tsql,user-defined-functions,Sql,Sql Server,Tsql,User Defined Functions,我正在玩这个代码片段(请原谅通用名称): 这最终将是一个用户提供的列表,他们将使用它来查询其他内容,但是玩这个让我很好奇。如果我要跑 从GetList('1111111'、'222'、'333')中选择* 我将得到相同的结果,就像我只为每个输入3个字符一样。由于我将varchar参数限制为字符,其他参数是否完全被忽略?如果我有一个像这样“溢出”的varchar参数(当然除了字符串末尾的数据丢失),是否会发生任何潜在的不好情况)由于您将参数的长度限制为3,其他字符被完全忽略 您可能遇到的唯一问题是

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

这最终将是一个用户提供的列表,他们将使用它来查询其他内容,但是玩这个让我很好奇。如果我要跑

从GetList('1111111'、'222'、'333')中选择*


我将得到相同的结果,就像我只为每个输入3个字符一样。由于我将varchar参数限制为字符,其他参数是否完全被忽略?如果我有一个像这样“溢出”的varchar参数(当然除了字符串末尾的数据丢失),是否会发生任何潜在的不好情况)

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

您可能遇到的唯一问题是,您是否确实希望返回长度超过3的字符

例如,如果您传入
1234567
,而您实际上想要整个值,则只会得到
123


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

谢谢,我不知道是否有一些经常被利用的溢出错误可能会发生。我这样做的原因是“永远不要低估用户”类型的情况:)。另外,我有点好奇会发生什么。@wootscootinboogie如果你有用户输入的值,如果确保它们只能输入3个字符,你可以做一件事。您可以使用子字符串等来更正长度。除非您不关心其余部分,只允许它将其截断为3
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