Chà, không có TRY_CONVERT() hoặc TRY_CAST() trong SQL-Server 2008, nhưng bạn có thể sử dụng các khuôn bên trong của XML thành các kiểu vô hiệu.
Hãy thử điều này
DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
,('blah') --bad data
SELECT t.*
,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;
Hơi bị hack ... Nhưng đẹp bằng cách nào đó;-)
Một số giải thích
CAST('' AS XML) chỉ là một thủ thuật để có được một XML thực sự để sử dụng các phương thức gốc của XML. sql:column() là một XQuery -function, cho phép bạn bao gồm cột của một tập hợp vào XQuery (sử dụng sql:variable cho các biến).
cast as xs:int? sẽ cố gắng phân tích cú pháp chuỗi dưới dạng giá trị int và sẽ trả về NULL nếu điều này không hoạt động.
Giới hạn là:Điều này sẽ luôn sử dụng mặc định của hệ thống của bạn (tương tự như TRY_CAST ). Với TRY_CONVERT bạn sẽ có nhiều quyền kiểm soát hơn đối với đầu ra với thông số thứ ba ...
Gợi ý:XQuery/Xpath phân biệt chữ hoa chữ thường. Vì vậy, có xs:dateTime? , nhưng bạn sẽ gặp lỗi với xs:datetime ...