Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 В каком случае set dateformat может игнорироваться?  [new]
2008sp1
Guest
Есть таблица с полем типа datetime:
create table t (v datetime)

При выполнении запроса:
set dateformat = ymd
insert into t values ('2011-01-20')
возникает ошибка 242: Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Это происходит только на одном конкретном сервере 2008SP1. На всех остальных (2000/5/8) все работает.
Куда копать?
17 май 11, 15:10    [10665166]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
В сторону прочтения FAQ на предмет того, как надо задавать дату и время строковой константой, чтобы не ругалось нигде.
17 май 11, 15:12    [10665183]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
2008sp1
Есть таблица с полем типа datetime:
create table t (v datetime)

При выполнении запроса:
set dateformat = ymd
insert into t values ('2011-01-20')
возникает ошибка 242: Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Это происходит только на одном конкретном сервере 2008SP1. На всех остальных (2000/5/8) все работает.
Куда копать?
/*set dateformat = ymd*/
insert into t values ('20110120')
17 май 11, 15:12    [10665187]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
2008sp1,
set dateformat = ymd
и работает вот так?
17 май 11, 15:14    [10665205]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Вообще, похоже, что у t есть триггер
17 май 11, 15:16    [10665224]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
2008sp1
Guest
В FAQ этого нет. Формат данных менять нельзя. Тригеров нет. С такой ошибкой вылетают любые операции преобразования из строки с таким форматом в datetime.
17 май 11, 15:52    [10665581]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
2008sp1
Guest
SomewhereSomehow
2008sp1,
set dateformat = ymd
и работает вот так?
Нет, конечно. :) set dateformat 'ymd'
17 май 11, 15:56    [10665639]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
2008sp1
SomewhereSomehow
2008sp1,
set dateformat = ymd
и работает вот так?
Нет, конечно. :) set dateformat 'ymd'
А кавычки-то одинарные зачем??
Применяйте инвариантный стандартный формат 'YYYYMMDD'. Вроде сказали уже
17 май 11, 15:58    [10665667]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
2008sp1,

а точно прям такая конструкция не работает? или это из скрипта какого-нить большого взято? посмотрите в таком случае, не устанавливается ли где-нить в скрипте русский язык типа такого?
set dateformat ymd
insert into t values ('2011-01-20')
go
--bla-bla-bla
--.....
--go
set language russian
insert into t values ('2011-01-20')
go
17 май 11, 16:01    [10665687]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
2008sp1
пропущено...
Нет, конечно. :) set dateformat 'ymd'
А кавычки-то одинарные зачем??
Применяйте инвариантный стандартный формат 'YYYYMMDD'. Вроде сказали уже
Про кавычки я зря сказал.
И так и так работает.
17 май 11, 16:09    [10665790]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
2008sp1
Есть таблица с полем типа datetime:
create table t (v datetime)

При выполнении запроса:
set dateformat = ymd
insert into t values ('2011-01-20')
возникает ошибка 242: Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Это происходит только на одном конкретном сервере 2008SP1. На всех остальных (2000/5/8) все работает.
Куда копать?


возможно, для конкретного инстанса установлен язык по умолчанию, отличный от остальных
выполните на этом и других экземплярах сервера
sp_configure 'default language'
и приведите к одному виду
но это латание дыр, вообще надо использовать YYYYMMDD, как уже говорили
17 май 11, 16:20    [10665909]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

а если:

insert into t values ('2011-20-01')

ошибки нет?

Posted via ActualForum NNTP Server 1.4

17 май 11, 16:29    [10665994]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
2008sp1
Guest
SomewhereSomehow,

Точно. Потом проверял в студии -- эффект тот же.


Shakill,

Эта устновка влияет только на создаваемые логины. Set dateformat имеет приоритет. Это если верить документации. :) Всякие инвариантные форматы работают, но исходный формат изменять нельзя.


daw,

Ошибка выдается при любой конвертации, в том числе и в такой.
17 май 11, 18:55    [10667232]     Ответить | Цитировать Сообщить модератору
 Re: В каком случае set dateformat может игнорироваться?  [new]
iljy
Member

Откуда:
Сообщений: 8711
2008sp1,

странные вы вещи говорите. Что выдаст
set dateformat ymd
select CAST('2001-01-20' as datetime)

set dateformat ydm
select CAST('2001-20-01' as datetime)
?
17 май 11, 19:34    [10667439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить