declare @input varchar(255) = 'abc'
select * from table where id = CAST(@input as int)
Run Code Online (Sandbox Code Playgroud)
我可以这样做,以便演员表会无声地失败,或默认为某些用户提供的(或系统默认值)?
Mar*_*ith 13
从SQL Server 2012及更高版本,您可以使用try_convert和try_parse运行.
在此之前你可以使用
DECLARE @input VARCHAR(11) = 'abc'
SELECT *
FROM table
WHERE id = CAST(CASE WHEN @input NOT LIKE '%[^0-9]%' THEN @input END AS INT)
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微调整一下测试(例如,它不允许使用负整数并允许使用大于最大值的正整数),但如果您找到合适的测试(例如此处的测试)并使用CASE语句,则应避免任何投射错误作为顺序评价为CASE是主要保证.