Помогите решить проблему с SET DATEFORMAT
Fib
Дата: 16.10.2003 15:44:30
-- создаём таблицу
create table [foo] (
[xp] int,
[date_report] [smalldatetime] default (getdate())
)
go
-- создаем процедурку
create proc sp_foo
@date smalldatetime
as
select xp, max(date_report) from foo group by xp
go
-- заполним
declare @count int
set @count = 100
WHILE (@count > 0)
BEGIN
insert [foo] (xp) values(@count)
set @count = @count - 1
END
-- делаем выборку
select * from foo
-- ручками копируем с результатов какую-нибудь дату
-- запускаем процедуру
sp_foo '2003-10-16 17:30:00'
-- в итоге 'Error converting data type varchar to smalldatetime'!!!
-- хорошо, меняем формат даты
set dateformat mdy
sp_foo '2003-10-16 17:30:00'
-- мой псевдовызов из программы
recordset rc(&session);
rc.Open("sp_foo '2003-10-16 17:30:00'");
... делаем что-то
rc.Close();
как решить проблему? перед псвевдовызовом каждый раз вызывать
set dateformat mdy
?? но ведь жалко время да и некрасиво как-то..:((
не хочется каждый раз выставлять перед вызовом процедуры.
можно ли выставить один раз и навсегда..?
HELP!!!
alexeyvg
Дата: 16.10.2003 15:47:31
Всегда вызывай так:
sp_foo '20031016 17:30:00'
без всяких там set dateformat...
Fib
Дата: 16.10.2003 15:53:36
спасибо..заработало..
только не понял принцип?
это всегда будет работать?
OldPferd
Дата: 16.10.2003 16:29:25
Всегда
Fib
Дата: 16.10.2003 17:11:47
теперь понятно, любое ненпрерывное значение из шести или восьми цифр всегда интерпретируюца как год, месяц, число..
MS SQL BOL
Дата: 16.10.2003 17:19:44
Writing International Transact-SQL Statements
...
When specifying dates in comparisons or for input to INSERT or UPDATE statements,
use constants that are interpreted the same for all language settings:
...
Applications using other APIs, or Transact-SQL scripts, stored procedures,
and triggers, should use the unseparated numeric strings
(for example, yyyymmdd as 19980924).
...