2014-02-18 7 views
2

У меня есть две таблицы: 'билет' и 'ticket_category'. В таблице «Ticket» есть столбец «Ticket_Uid» и его тип «UniqueIdentifier». Каждый билет «билет» в «билет» стол имеет один ко многим изображениям в 'ticket_category' стол. .Ошибка ввода значений, разделенных запятыми, в таблице: SQL Server 2008

'билета' стол:

Ticket_Uid 
100 

Ticket_Category:

Ticket_Uid Ticket_Category_Uid 
100   ABC 
100   DEF 
100   XYZ 

Я хочу создать следующую таблицу с именем '' comment_mining:

Ticket_Uid Category_List 
100   ABC,DEF,XYZ 

таблица уже создана, используя следующие:

create table dbo.comment_mining 
(
Ticket_UID [uniqueidentifier] NOT NULL, 
time_created datetime, 
time_closed datetime, 
total_time_taken int, 
category_list nvarchar(500), 
comment_list varchar(8000) 
); 

Я уже создал эту таблицу и заселена столбец «Ticket_Uid».

Для вставки в столбец «category_list», я использую следующий запрос:

insert into dbo.comment_mining(category_list) 
SELECT 
    (SELECT distinct convert(varchar(500),category_id) + ',' AS [text()] 
    FROM ticket_category pr 
    WHERE pr.ticket_uid = p.ticket_uid 
    FOR XML PATH ('')) 
AS Category_list 
FROM comment_mining p 

Когда я запускаю выше запрос, он дает мне следующую ошибку:

Msg 515, Level 16, State 2, Line 1 
Cannot insert the value NULL into column 'Ticket_UID', table 'Support_Saas.dbo.comment_mining'; column does not allow nulls. INSERT fails. 
The statement has been terminated. 

(который как я даже не вставляю в столбец «Ticket_Uid»)

Когда я запускаю тот же запрос без инструкции insert, он выполняется отлично. Запрос выглядит следующим образом:

SELECT 
    (SELECT distinct convert(varchar(500),category_id) + ',' AS [text()] 
    FROM ticket_category pr 
    WHERE pr.ticket_uid = p.ticket_uid 
    FOR XML PATH ('')) 
AS Category_list 
FROM comment_mining p 

Да, есть некоторые NULL значения, когда выше запрос выполняется, но столбец «category_list» в «comment_mining» таблицы может принимать NULL значения. Почему ошибка в столбце «ticket_Uid»?

Кто-нибудь, пожалуйста, объясните, почему это происходит и каково это?

P.S. - Я новичок в SQL.

ответ

1

Причина у вас есть ошибка вставки на столе comment_mining потому, что вы установите Ticket_Uid столбец как not null; однако, поскольку он не имеет значения по умолчанию, вставка терпит неудачу, потому что ли вы вставляете это поле специально или нет, когда создается строка, все столбцы должны быть заполнены или быть null.

Вы можете сделать один из 2-х вещей:


  • Изменение структуры comment_mining таблицы, чтобы иметь значение default для Ticket_Uid (Вы можете сделать это в конструкторе таблиц или с кодом:

Пример 1:

Alter Table comment_mining 
    Add Constraint DF_CommentMining_1 default NewID() for Ticket_UID 

  • Сделайте вставку в явном виде включают в себя сгенерированное значение uniqueidentifier (GUID) с помощью функции SQL NewID() для заполнения столбца Ticket_UID UniqueIdentifier

Пример 2:

insert into dbo.comment_mining(Ticket_Uid, category_list) 
SELECT NewID(), 
    [ your subquery ]... 

В обоих случаях вы теперь удовлетворяете ограничение NOT NULL на comment_mining.Ticket_UID, либо автоматически заселяя себя, либо задавая значение.

+0

Спасибо за ваш ответ. Я просто понял это. Вы абсолютно правы. Когда я удалил ограничение из ticket_uid, я смог правильно встать. – Patthebug

0

попробовать это,

;with cte as 
( 
select 100 Ticket_Uid,'ABC' Ticket_Category_Uid union all 
select 100 , 'DEF' union all 
select 100, 'XYZ' 
) 

select distinct b.Ticket_Uid, 
stuff((select ','+a.Ticket_Category_Uid from cte a where a.Ticket_Uid=b.Ticket_Uid for xml path('')),1,1,'') 

from cte b 
Смежные вопросы