Нет вызова метода, если это - то, что Вы просите. С небольшим исследованием я предполагаю, что Вы могли записать свое собственное. Конкретный экземпляр имеет фиксированное, измеренное полученный из количества ссылок и примитивных значений плюс бухгалтерские данные экземпляра. Вы просто обошли бы граф объектов. Чем менее варьировавшийся типы строки, тем легче.
, Если это слишком медленно или просто больше проблемы, чем, он стоит, всегда существует хорошее старомодное правило ползунков подсчета строки.
Прежде всего, поскольку вы используете SQL Server 2005, вы должны поместить свой код, который может дать сбой, в BEGIN TRY ..... END TRY BEGIN CATCH .... END CATCH
блоки - блоки try / catch для T-SQL!
Во-вторых, для всех манипуляций с датой я бы всегда использовал формат ISO-8601 , который будет работать независимо от того, какой текущий формат даты установлен в SQL Server.
Формат ISO-8601: ГГГГММДД
только для дат или ГГГГ-ММ-ДДТЧЧ: ММ: СС
для даты со временем - поэтому я бы написал ваш код как:
BEGIN TRY
SET @Source='07152009'
SET @Temp = RIGHT(@Source, 4) + -- YYYY
LEFT(@Source, 2) + -- MM
SUBSTRING(@Source, 3, 2) -- DD
IF ISDATE(@Temp)!=1
BEGIN
RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
-- handle error if something bombs out
END CATCH
Не полагайтесь на какой-либо конкретный установленный формат даты !! Пришлите мне свой код, и я опробую его в швейцарско-немецкой системе - я почти гарантирую, что он сломается, если вы вслепую примете «en-US» и, следовательно, «мм / дд / гггг» - это ' s не одинаковый параметр повсюду на этой планете.
К сожалению, SQL Server довольно плохо обрабатывает даты - возможно, это может быть точкой расширения, в которой использование сборки CLR внутри SQL Server имело бы смысл. гораздо более богатые функции обработки даты в .NET ??
Marc
PS: похоже, формат ISO-8601, который я знал, YYYY-MM-DD, не всегда работает в SQL Server - вопреки тому, что, кажется, проповедует электронная документация . Вместо этого используйте ГГГГММДД или ГГГГ-ММ-ДДТЧЧ: ММ: СС.
t всегда работают в SQL Server - вопреки тому, что, кажется, проповедует электронная документация. Вместо этого используйте ГГГГММДД или ГГГГ-ММ-ДДТЧЧ: ММ: СС.
t всегда работают в SQL Server - вопреки тому, что, кажется, проповедует Электронная документация. Вместо этого используйте ГГГГММДД или ГГГГ-ММ-ДДТЧЧ: ММ: СС.
Спасибо, gbn!
Вы можете гарантировать порядок даты, месяца и года, используя SET DATEFORMAT. Это означает, что ISDATE будет анализировать '15-07-2009 'как 15 июля 2009 г.
В противном случае ваш подход достаточно хорош, учитывая внешние ограничения ... но вы также можете изменить порядок в ANSI / ISO.
После ответа marc_s : "SET DATEFORMAT dmy" работает для большинства европейских настроек ...
OK:
SET LANGUAGE british
SELECT ISDATE('2009-07-15') --this is ansi says marc_s. It gives "zero"
SELECT ISDATE('2009-07-15T11:22:33') --this really is ANSI and gives true
SET LANGUAGE german
SELECT ISDATE('2009-07-15') --false
SELECT ISDATE('2009-07-15T11:22:33') --true