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

Откуда:
Сообщений: 21
работаю с oledb c# (до этого с sqlCE) и мне нужна функция merge,но ее не хочет распознавать ни один не второй
код создания таблицы
+
  if (!(System.IO.File.Exists("База.sdf")))
            {
                ADOX.Catalog BD = new ADOX.Catalog();
                BD.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=База.sdf");
                BD = null;
                using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=База.sdf"))
                {
                    conn.Open();
                    OleDbCommand command = new OleDbCommand("CREATE TABLE contacts (cid int IDENTITY(1,1), путь nvarchar(200) NOT NULL, дата nvarchar(50) NOT NULL, колво int, таг nvarchar(10))", conn);
                    OleDbCommand command2 = new OleDbCommand("CREATE TABLE secondary (cid int IDENTITY(1,1), путь nvarchar(200) NOT NULL, дата nvarchar(50) NOT NULL, колво int NOT NULL, таг nvarchar(10))", conn);
                     OleDbCommand command3 = new OleDbCommand("CREATE TABLE shortcut (cid int IDENTITY(1,1), путь nvarchar(200) NOT NULL, дата nvarchar(50) NOT NULL, таг nvarchar(10))", conn);
                    command.ExecuteScalar();
                    command2.ExecuteScalar();
                    command3.ExecuteScalar();
                }
            }

код запроса
OleDbCommand command = conn2.CreateCommand();
                command.CommandText = "CREATE PROCEDURE A "+
                                    "AS MERGE into contacts AS a USING (select * from secondary) AS b ON (a.путь=b.путь and a.дата!=b.дата)" +
                                    "WHEN MATCHED THEN UPDATE SET a.ПУТЬ=b.путь, a.дата=b.дата,a.колво=a.колво+1" +
                                    "WHEN NOT MATCHED THEN INSERT (путь,дата,колво,таг) VALUES(b.путь,b.дата,1,no) GO";
                command.ExecuteScalar();


можно как-то переписать merge на примитивные функции?Заранее спасибо
4 май 14, 11:35    [15968738]     Ответить | Цитировать Сообщить модератору
 Re: переписать merge в ins/upd  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Антоха_ВУ
+
код запроса
OleDbCommand command = conn2.CreateCommand();
                command.CommandText = "CREATE PROCEDURE A "+
                                    "AS MERGE into contacts AS a USING (select * from secondary) AS b ON (a.путь=b.путь and a.дата!=b.дата)" +
                                    "WHEN MATCHED THEN UPDATE SET a.ПУТЬ=b.путь, a.дата=b.дата,a.колво=a.колво+1" +
                                    "WHEN NOT MATCHED THEN INSERT (путь,дата,колво,таг) VALUES(b.путь,b.дата,1,no) GO";
                command.ExecuteScalar();
можно как-то переписать merge на примитивные функции?Заранее спасибо
Во-первых, для подобных вопросов (про шарп и OLEDB) есть более специализированные разделы форума.
Во-вторых, SQLCE не поддерживает хранимых процедур, которую Вы в своем коде зачем-то пытаетесь создать.
В-третьих, переписать код нужно как-то так:
OleDbCommand command = conn2.CreateCommand();
command.CommandText = "MERGE into contacts AS a USING (select * from secondary) AS b ON (a.путь=b.путь and a.дата!=b.дата)" +
    "WHEN MATCHED THEN UPDATE SET a.ПУТЬ=b.путь, a.дата=b.дата,a.колво=a.колво+1" +
    "WHEN NOT MATCHED THEN INSERT (путь,дата,колво,таг) VALUES(b.путь,b.дата,1,no)";
command.ExecutNonQuery();
4 май 14, 12:21    [15968804]     Ответить | Цитировать Сообщить модератору
 Re: переписать merge в ins/upd  [new]
Антоха_ВУ
Member

Откуда:
Сообщений: 21
sphinx_mv,
Изначально писал без процедуры,но он и просто merge не поддерживает
4 май 14, 12:32    [15968813]     Ответить | Цитировать Сообщить модератору
 Re: переписать merge в ins/upd  [new]
invm
Member

Откуда: Москва
Сообщений: 9405
Антоха_ВУ
он и просто merge не поддерживает
Кто он? Хотя бы версию сервера озвучили.

1. Необходимые пробелы в тексте инструкции за вас драйвер OLEDB или сервер будет расставлять будут? Ну так они этого не умеют.
2. Согласно синтаксиса, merge должен заканчиваться ";"
4 май 14, 12:50    [15968846]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить