Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для xoxmodav

PainStaking


Moderator


Сообщения: 3992
Благодарности: 442

Профиль | Отправить PM | Цитировать


1. Не получится - коммерческая тайна и всё такое.
2. Как это реализовать?
3. Не владеем - сможешь помочь?
4. Наверняка можно, но вот вот вопрос - какие средства, кроме стандартных, имеются для этого?

Опишу чуть подробней ситуацию, может будет проще решить проблему:

Есть старая 11 ГБ база данных MS SQL 2000 "1С: Предприятие 7" (~500 таблиц), в которой ковырялось не одно поколение программистов. Поставили задачу попробовать осуществить выгрузку данных из базы с последующей загрузкой этих данных в другую базу.

Сотрудник, занимающийся этой проблемой накидал программку в C#, которая позволяет автоматизировать процесс выгрузки таблиц из базы в плоские файлы:

Код: Выделить весь код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace выгрузка_1С
{
    public partial class Form1 : Form
    {
        public string s;
        public Form1()
        {
            InitializeComponent();
        }


        private void Out_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void Start_Click(object sender, EventArgs e)
        {
            // string IP = Ip.Text;
            string IP = "10.10.10.105";
            //  string newbase = BaseName.Text;
            string newbase = "proizvod";
            //string UserName = NameUser.Text;
            string UserName = "sa";
            //string Pass = Pas.Text;
            string Pass = "1";
            string con = @"Network address =" + IP + ";" +
                        "user id= " + UserName + ";" +
                         "Pwd= " + Pass;
            SqlConnection cn = new SqlConnection(con);
            string str = "use " + newbase + " SELECT QUOTENAME(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=N'BASE TABLE';";
            cn.Open();
            SqlCommand Com = new SqlCommand(str, cn);
            SqlDataReader readerCom = Com.ExecuteReader();
            int i = 0;
            //string s = "";
            while (readerCom.Read())
            {
                string a = readerCom[0].ToString();
                SqlConnection cn1 = new SqlConnection(con);
                cn1.Open();
                string file = @"d:\11\" + a + ".txt";
                string str1 = "exec master..xp_cmdshell 'bcp  " + newbase + ".dbo." + a + " out " + file + "  -c -C RAW  -U sa -P 1'";
                SqlCommand Com1 = new SqlCommand(str1, cn1);
                Com1.CommandTimeout = 50000;
                Com1.ExecuteNonQuery();
                cn1.Close();
            }
            MessageBox.Show("111");
            cn.Close();
        }
    }
}
Однако на части таблиц при попытке импорта (как в существующую, так и в созданную с нуля базу) выдаёт ошибку в момент выполнения:

Цитата:
- Выполнение (Ошибка)
Сообщения
• Ошибка 0xc02020a1: Задача потока данных 1: Ошибка преобразования данных. При преобразовании данных для столбца "Столбец 23" возращено значение состояния 4 и текст состояния "Текст был усечен, или один и более символов не имеют соответствия в целевой кодовой странице.".
(Мастер импорта и экспорта SQL Server)

• Ошибка 0xc020902a: Задача потока данных 1: Сбой выходной столбец "Столбец 23" (102) из-за возникшего усечения, и стратегия обработки усечения строк в "выходной столбец "Столбец 23" (102)" определяет сбой по причине усечения. Ошибка усечения возникла в указанном объекте указанного компонента.
(Мастер импорта и экспорта SQL Server)

• Ошибка 0xc0202092: Задача потока данных 1: Ошибка при обработке строки 0 в файле "D:\11\111.txt".
(Мастер импорта и экспорта SQL Server)

Ошибка 0xc0047038: Задача потока данных 1: Код ошибки служб SSIS: DTS_E_PRIMEOUTPUTFAILED. Метод PrimeOutput для компонента компонент "Источник - 111_txt" (1) завершился сбоем с кодом ошибки 0xC0202092. Компонент вернул код ошибки при вызове метода PrimeOutput() из обработчика конвейера. Значение кода ошибки определяется компонентом, но ошибка является неустранимой, и выполнение конвейера остановлено. Возможно, до этого были опубликованы сообщения об ошибках, в которых содержатся более подробные сведения о причине сбоя.
(Мастер импорта и экспорта SQL Server)
Пробовали экспорт этих таблиц делать вручную через мастер - при импорте вываливается аналогичная ошибка.

P.S. Ошибка вываливается как на SQL 2005 SP3 (RUS), так и на SQL 2008 SP2.

P.P.S. Сейчас будем проверять работу импорта на SQL 2005 SP4 ENG.

-------
RadioActive - and therefore harmful, cynical and the extremely dangerous.


Отправлено: 15:17, 16-11-2010 | #4