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
...