Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Какой collation выставить на БД\Таблице?  [new]
Poleax
Member

Откуда: msk
Сообщений: 208
Создана таблица, с вычисляемым полем
CREATE TABLE [dbo].[Branch](
	[Branch_ID] [int] IDENTITY(1,1) NOT NULL,
	[Branch_ID_Name] [nvarchar](255) NULL,
	[Branch_Code] [nvarchar](50) NULL,
	[SCDStart] [datetime] NULL,
	[SCDEnd] [datetime] NULL,
	[SCDOriginalID] [int] NULL,
	[SCDStatus]  AS (case when [SCDEnd]='12/31/9999' then 'Active' else 'Inactive' end),
 CONSTRAINT [PK_Branch] PRIMARY KEY CLUSTERED 
(
	[Branch_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Запрос выдает ошибку
SELECT TOP 1000 [Branch_ID]
      ,[Branch_ID_Name]
      ,[Branch_Code]
      ,[SCDStart]
      ,[SCDEnd]
      ,[SCDOriginalID]
      ,[SCDStatus]
  FROM [MSKReport].[dbo].[Branch]

Msg 242, Level 16, State 3, Line 2
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Судя по всему проблема в поле SCDStatus.

Какой коллатион надо таблице или в БД выставить чтоб нормально отрабатывал селект?
19 июл 09, 13:49    [7433105]     Ответить | Цитировать Сообщить модератору
 Re: Какой collation выставить на БД\Таблице?  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 765
Poleax,

А причем здесь collation? Ты сообщение об ошибке прочитал?
19 июл 09, 14:35    [7433151]     Ответить | Цитировать Сообщить модератору
 Re: Какой collation выставить на БД\Таблице?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Poleax
Создана таблица, с вычисляемым полем
CREATE TABLE [dbo].[Branch](
	[Branch_ID] [int] IDENTITY(1,1) NOT NULL,
	[Branch_ID_Name] [nvarchar](255) NULL,
	[Branch_Code] [nvarchar](50) NULL,
	[SCDStart] [datetime] NULL,
	[SCDEnd] [datetime] NULL,
	[SCDOriginalID] [int] NULL,
	[SCDStatus]  AS (case when [SCDEnd]='99991231' then 'Active' else 'Inactive' end),
 CONSTRAINT [PK_Branch] PRIMARY KEY CLUSTERED 
(
	[Branch_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Запрос выдает ошибку
SELECT TOP 1000 [Branch_ID]
      ,[Branch_ID_Name]
      ,[Branch_Code]
      ,[SCDStart]
      ,[SCDEnd]
      ,[SCDOriginalID]
      ,[SCDStatus]
  FROM [MSKReport].[dbo].[Branch]

Msg 242, Level 16, State 3, Line 2
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Судя по всему проблема в поле SCDStatus.

Какой коллатион надо таблице или в БД выставить чтоб нормально отрабатывал селект?
COLLATE не при чём. См. DATEFORMAT. Но 'YYYYMMDD' от DATEFORMAT не зависит.
19 июл 09, 14:35    [7433152]     Ответить | Цитировать Сообщить модератору
 Re: Какой collation выставить на БД\Таблице?  [new]
Poleax
Member

Откуда: msk
Сообщений: 208
У меня много таблиц где "[SCDStatus] AS (case when [SCDEnd]='12/31/9999' then 'Active' else 'Inactive' end),
"
В каждой переделывать много времени уйдет.
Можно как нибудь исправить один раз и для всей БД?

я подумал что от коллейшена зависит рекция на обработку даты.
БД перенесена с другой сервера 2008 Eng, какие там настройки сервера и БД я не знаю.
При востановлении из бекапа на пустую БД селект прекратил отрабатывать
19 июл 09, 14:50    [7433167]     Ответить | Цитировать Сообщить модератору
 Re: Какой collation выставить на БД\Таблице?  [new]
Poleax
Member

Откуда: msk
Сообщений: 208
скорее всего это какая то настроечка сервера, иначе как же тогда селект работал на БД на исзодном сервере.
19 июл 09, 14:51    [7433168]     Ответить | Цитировать Сообщить модератору
 Re: Какой collation выставить на БД\Таблице?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3200
SET DATEFORMAT неявно определяется через SET LANGUAGE. Измените в свойствах логина язык по умолчанию на какой-нибудь, который даст подходящий порядок частей даты.

Но вообще, конечно, в хорошую ловушку вы себя загнали. Я бы менял определения дефолтов - если использовать представления INFORMATION_SCHEMA или sys.objects, то это можно автоматизировать и не ковыряться вручную с каждым объектом.
19 июл 09, 15:18    [7433195]     Ответить | Цитировать Сообщить модератору
 Re: Какой collation выставить на БД\Таблице?  [new]
Poleax
Member

Откуда: msk
Сообщений: 208
Ennor Tiegael
SET DATEFORMAT неявно определяется через SET LANGUAGE. Измените в свойствах логина язык по умолчанию на какой-нибудь, который даст подходящий порядок частей даты.

Но вообще, конечно, в хорошую ловушку вы себя загнали. Я бы менял определения дефолтов - если использовать представления INFORMATION_SCHEMA или sys.objects, то это можно автоматизировать и не ковыряться вручную с каждым объектом.

Спасибо, теперь я понял фишку. У меня язык на логине стоял русский. Благодарю.
19 июл 09, 15:23    [7433201]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить