Не удалось включить ограничения

Рейтинг: 1Ответов: 2Опубликовано: 14.04.2015

Добрый день, не могу понять как отключить необходимость определения ключей и значений в запросе к T-SQL , делаю запрос к серверу

    SELECT
    Dates,
    Name,
    REPLACE(SpecialistName, 'ttt-', ''),
    WorkerName,
    PaymentTypeName,
    CASE InputPlace
        WHEN 'D' THEN 'Z'
        WHEN 'K' THEN 'Z'
        WHEN 'W' THEN 'Z'
        ELSE 'X'
    END,
    COUNT(*),
    SUM(CASE WHEN Code_Ref IS NOT NULL THEN 1 ELSE NULL END) AS [Обслужено]
FROM Cards
JOIN Xment ON XmentID = XmentID_Ref
JOIN Worker ON WorkerID = MtorID_Ref
LEFT JOIN Specialist ON SpecialistID = SpecialistID_Ref
JOIN PaymentType ON PaymentTypeID = PaymentTypeID_Ref
WHERE Dates BETWEEN '20150401' AND '20150414' AND HelpPlaceID_Ref = 1
GROUP BY Dates, Name, SpecficName, WorkerName, PaymentTypeName, InputPlace
ORDER BY Dates, Name, SpecficName, WorkerName, PaymentTypeName, InputPlace

а возвращает он мне

Не удалось включить ограничения. По меньшей мере одна строка содержит значение, нарушающее ограничения по отсутствию пустых значений, уникальности или внешним ключам.

в Management Studio всё работает прекрасно, а вот в программе выдает ошибку, часть кода программы

InstallConnect.Open();
var StatConnect = InstallConnect.State;
if (StatConnect.ToString() == "Open")
{
    ValueStatusSQLC.StatusConnect = true;
    if (ValueStatusSQLC.ExecuteCommand)
    {
        ValueDataConnect.SendCommand.Connection = InstallConnect;
        ValueDataConnect.SendCommand.CommandText = ValueDataConnect.CodeQuery.ToString();
        SqlDataReader ResultQuery = ValueDataConnect.SendCommand.ExecuteReader();
        Thread CancelTransaction = new Thread(new ThreadStart(CancelQuery));
        CancelTransaction.Start();
        CancelTransaction.Join();
        int CheckColums = ResultQuery.FieldCount;
        ValueDataConnect.TablesQuery.Load(ResultQuery);
        foreach (string Line in ListAnwers)
        {
            ComponentForm1.Invoke(new Action(() => ComponentForm1.richTextBox2.AppendText("SQL Server " + NameServer + " > " + Line + '\n')));
        }
        InstallConnect.Close();
        if (CheckColums != 0)
        {
            if (!ValueStatusSQLC.OpenOutputResultSql)
            {
                OutputResultSql StartForm = new OutputResultSql();
                ComponentForm1.Invoke(new Action(() => StartForm.ShowDialog()));
            }
            else if (ValueStatusSQLC.OpenOutputResultSql)
            {
                OutputResultSql StartUpdate = new OutputResultSql();
            }
        }
        else if (CheckColums == 0)
        {
            MessageBox.Show(ResultQuery.ToString(), "Результат соединения", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}

Ответы

▲ 3Принят

"Не удалось включить ограничения" - это не ошибка SQL. Такую ошибку бросает класс DataSet при загрузке в него неконсистентных данных. Ловите ошибку в отладчике и смотрите значение результат вызова dt.GetErrors() у того датасета, который бросил ошибку - в нем будут подробности.

▲ 3

Если кому ни будь пригодится. Такая ошибка может возникать, если длина поля меньше, чем в таблице.