declare @input varchar(255) = 'abc'
select * from table where id = CAST(@input as int)
我可以这样做,以便演员表会无声地失败,或默认为某些用户提供的(或系统默认值)吗?
答案 0 :(得分: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)
您可能需要稍微调整一下测试(例如,它不允许使用负整数并允许大于最大int的正数)但如果找到合适的测试(e.g. the one here)并使用CASE
声明您应该避免任何投射错误,因为CASE
的评估顺序是mostly保证。
答案 1 :(得分:1)
您可以将您的选择放在TRY-CATCH
块中,然后使用默认值在CATCH
中重新发出查询。