나는 13,8k 개가 넘는 거대한 테이블을 준비하고 있습니다. 레이아웃, 뭔가 같은 것입니다SQL Server 2008의 세 필드에서 datetime2 만들기
CREATE TABLE table1(
[id] [int] NOT NULL,
[regnr] [char](10) NULL,
[kilde] [char](100) NULL,
[dd] [char](10) NULL,
[mm] [char](10) NULL,
[yyyy] [char](16) NULL,
)
날짜 부분이 같은 레이아웃을해야합니다 정리, 플러스 중요하지 않은 다른 분야 인 새 테이블.
create table table2(id int primary key identity not null, regnr nvarchar(10), kilde nvarchar(100), dato datetime2)
나는 다음 커서를 만든 내가 그것을 실행 befor을 나는
SET IDENTITY_INSERT navneregister on
을 해제 같은 커서 모양이지만 인터 휴식 일이 내가 새로운 DATETIME2에 세 개의 필드의 구문 분석.
declare @id int, @regnr nvarchar(10), @kilde nvarchar(100), @composeddate nvarchar(max), @dd char(10), @mm char(10), @yyyy char(16)
declare p cursor
for select id, regnr, kilde, dd, mm, yyyy from table2
open p
fetch p into @id, @regnr, @kilde, @dd, @mm, @yyyy
while @@FETCH_STATUS != -1
begin
begin
if((@mm = '0' or @mm = '00') and (@dd = '0' or @dd = '00') and (@yyyy ='0000'))
set @composeddate = null
end
if(@mm = '0' or @mm = '00')
set @mm = '01'
if(@dd = '0' or @dd = '00')
set @dd = '01'
begin
if(@yyyy = '')
set @composeddate = null
else
set @composeddate = CAST(CAST(@yyyy AS char(16)) + '-' + CAST(@mm AS char(10)) + '-' + CAST(@dd AS char(10)) AS DATETIME2)
end
begin
insert into table1(id, regnr, kilde, dato)
values (@id, @regnr, @kilde, @composeddate)
end
fetch p into @id, @regnr, @kilde, @dd, @mm, @yyyy
end
close p
deallocate p
내가 부분적으로 작동하지만, 예를 들어, 만약 DD = 00 실패 일부 가장자리 경우가있다, mm = 00 yyyy는 0000 또한 어디 년간 아닌가요 세트와 같은 특별한 경우의 부하가, 그러나 월과 일이 설정되어 있고, 내 계획은 0000으로 연도를 설정하는 것입니다. 또한 세 개의 필드가 모두 비어있는 경우도 있습니다. 좋은 조언을 해 줄 수있는 사람?
입문 내러티브와 커서 코드 사이에'table1'과'table2'을 섞어 놓았습니다. (여전히'SET IDENTITY_INSERT'에 실제 테이블 이름이 포함되어 있음을 알지 못합니다.) 하지만 코드 형식을 정리했습니다. 도움을 받으려면 –