Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2008 предава тип данни като параметър за функция

Е, няма TRY_CONVERT() или TRY_CAST() в SQL-Server 2008, но можете да използвате вътрешните преобразувания на XML към nullable типове.

Опитайте това

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;

Малко хак... Но някак красиво;-)

Малко обяснение

CAST('' AS XML) е просто трик за получаване на истински XML за да използвате собствените методи на XML. sql:column() е XQuery -функция, която ви позволява да включите колона на набор в XQuery (използвайте sql:variable за променливи).

cast as xs:int? ще се опита да анализира низа като int-стойност и ще върне NULL, ако това не работи.

Ограничението е:Това винаги ще използва настройките по подразбиране на вашата система (подобно на TRY_CAST ). С TRY_CONVERT бихте имали повече контрол върху изхода с третия параметър...

Съвет:XQuery/Xpath е строго чувствителен към главни и малки букви. Значи има xs:dateTime? , но ще получите грешка с xs:datetime ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предайте таблицата като параметър в UDF на sql сървъра

  2. Как да покажете съпоставянето на колона в SQL Server (T-SQL)

  3. Как да проверите вашата версия на SQL Server

  4. Преобразувайте „smalldatetime“ в „datetime“ в SQL Server (T-SQL примери)

  5. Минали ли са първичните ключове?