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

Откуда:
Сообщений: 87
Добрый день.

Microsoft SQL Server Management Studio 9.00.4035.00
Microsoft Analysis Services Client Tools 2005.090.4035.00
Microsoft Data Access Components (MDAC) 2000.085.3006.00 (xpsp_sp3_qfe.080821-1625)
Microsoft MSXML 2.6 3.0 4.0 6.0
Microsoft Internet Explorer 8.0.6001.18702
Microsoft .NET Framework 2.0.50727.3082
Operating System 5.1.2600


Подскажите, пожалуйста почему выдает ошибку? BOL смотрел, вроде все правильно...

set nocount on;

--Создаём тестовую БД
--create database TestPT;
--go

USE TestPT
go

if exists (select name from sysobjects where name='TestPT_table_11')
DROP TABLE [dbo].[TestPT_table_11]
go
create table dbo.TestPT_table_11 ( dt datetime,
a int,
b int
);
go

--Наполним данными таблицу
insert into dbo.TestPT_table_11
values ( '20121201 04:00', 1, 1 ),
( '20121201 05:00', 1, 1 ),
( '20121201 06:00', 1, 1 );
go
/*
--Удаляем таблицу
drop table dbo.TestPT_table_11;
go
*/


Ругается на строку "values ( '20121201 04:00', 1, 1 ),"

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ','.

Заранее спасибо.
10 янв 14, 13:17    [15396231]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nike59
Ругается на строку "values ( '20121201 04:00', 1, 1 ),"

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ','.

А версия вашего сервера поддерживает такой синтаксис ?

ЗЫ
Версия сервера это не версия Management Studio
10 янв 14, 13:19    [15396247]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Nike59
Member

Откуда:
Сообщений: 87
select @@version выдает:

Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

т.е. в 2005 не поддерживается вставка сразу нескольких строк?
вот те раз...

а может ошибка при попытке переключить данные каскадной таблицы в секцию тоже с версией связана?

хочу заменить данные в последней секции на новые

-- создание функции секционирования
CREATE PARTITION FUNCTION DocsDateRangePFN(smalldatetime)
AS
RANGE RIGHT FOR VALUES ('20130201',
'20130301',
'20130401',
'20130501',
'20130601')

-- создание схемы секционирования
CREATE PARTITION SCHEME DocsDatePScheme
AS
PARTITION DocsDateRangePFN
ALL TO ([PRIMARY])

.......

ограничение
ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130101' )
-- CHECK ( [DateReg] >= '20130101' and [DateReg] is not null )
GO


-- выключение последней (6-ой) секции таблицы Docs
ALTER TABLE dbo.Docs
SWITCH PARTITION 6 TO Docs_CTDel
GO

--выполняется!
-- подключение последней (6-ой) секции таблицы Docs
ALTER TABLE Docs_CTAdd
SWITCH TO dbo.Docs PARTITION 6
GO

-- не подключает!


" failed with the following error: "ALTER TABLE SWITCH statement failed. Check constraints or partition function of source table 'MA_DWH.dbo.Docs_CTAdd' allows values that are not allowed by check constraints or partition function on target table 'MA_DWH.dbo.Docs'.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

таблица dbo.Docs - секционирована, таблицы Docs_CTAdd и Docs_CTDel - каскадные.
структура таблиц аналогичная, ограничения (constraints ) на таблицы dbo.Docs и Docs_CTAdd совпадают.
в 6-ой секции Docs были данные с '20130601' по '20130630', в Docs_CTAdd с '20130601' по '20130715'
Подскажите, если кто-то меня понял, неделю уже бьюсь...
10 янв 14, 13:56    [15396545]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nike59
select @@version выдает:

Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

т.е. в 2005 не поддерживается вставка сразу нескольких строк?
вот те раз...

Что мешает окрыть хелп для этой версии и проверить ?
И почему вы ставите знак равенства между синтакисом и "не поддерживается вставка сразу нескольких строк" ?

Сообщение было отредактировано: 10 янв 14, 14:04
10 янв 14, 14:03    [15396595]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
сheck constraint
Guest
Nike59
" failed with the following error: "ALTER TABLE SWITCH statement failed. Check constraints or partition function of source table 'MA_DWH.dbo.Docs_CTAdd' allows values that are not allowed by check constraints or partition function on target table 'MA_DWH.dbo.Docs'.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.


у вас на таблице Docs_CTAdd нет нужного сheck constraint, он должен быть таким чтобы в таблице не могло быть записей за пределами секции в которую вы SWITCH-те

т.е. DateReg >= '20130601' and DateReg < '20130701' (или какой у вас там период)
10 янв 14, 14:09    [15396646]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Nike59
Member

Откуда:
Сообщений: 87
есть ограничение
ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130101' )
-- CHECK ( [DateReg] >= '20130101' and [DateReg] is not null )
GO

т.к. это последняя секция, то я ограничиваю только с одной стороны, как и у основной (секционированной) таблицы. Или это неверно и ограничение должно быть именно для данной секции, т.е.

ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130601')
GO

или ограничение должно быть с двух сторон?
ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130601' AND [DateReg] < '20130716')
GO
10 янв 14, 14:34    [15396877]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
сheck constraint
Guest
Nike59
есть ограничение
ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130101' )
-- CHECK ( [DateReg] >= '20130101' and [DateReg] is not null )
GO

т.к. это последняя секция, то я ограничиваю только с одной стороны, как и у основной (секционированной) таблицы. Или это неверно и ограничение должно быть именно для данной секции, т.е.

ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130601')
GO

или ограничение должно быть с двух сторон?
ALTER TABLE dbo.Docs_CTAdd
WITH CHECK
ADD CONSTRAINT Docs_CTAddRangeYear
CHECK ( [DateReg] >= '20130601' AND [DateReg] < '20130716')
GO


вы уж определитесь какое у вас ограничение

create partition function pf_test(datetime)
as 
range right for values (
	'20130501',
	'20130601'
)

create partition scheme ps_test 
as 
partition pf_test 
all to ([primary])


create table dbo.t (
	D datetime not null
) on ps_test(D)

create table dbo.t_switch (
	D datetime not null
)


insert t_switch(d)
values ('20130610')



ALTER TABLE dbo.t_switch
WITH CHECK
ADD CHECK ( d >= '20130601' ) 



alter table dbo.t_switch switch to dbo.t partition 3


drop table dbo.t_switch
drop table dbo.t
drop partition scheme	ps_test
drop partition function pf_test

вот такой пример у вас отрабатывает?
если да - ищите проблемы в коде, где-то не то ограничение выставлено
10 янв 14, 15:15    [15397356]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Nike59
Member

Откуда:
Сообщений: 87
Пример отрабатывает без ошибок, буду разбираться, спасибо!
10 янв 14, 16:33    [15398013]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Nike59
Member

Откуда:
Сообщений: 87
Получилось! Ограничение на каскадную таблицу было задано как на всю секционированную таблицу, а надо было делать ограничение как на секцию, куда вставляем.
13 янв 14, 14:47    [15408308]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строк в таблицу  [new]
Nike59
Member

Откуда:
Сообщений: 87
Всем спасибо!
13 янв 14, 14:49    [15408320]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить