Prashant Vishnoi Ответов: 1

Любая альтернатива OpenXML и инструкции merge SQL server в mysql


У меня есть тысячи элементов в формате XML. Он состоит из ItemID и ItemName. Мое требование заключается в том, что мне нужно вставить все записи в базу данных в таблице ItemMaster. Если какой-либо из этих элементов уже существует, то он не должен быть вставлен, а должен обновить столбец ModifiedOn в таблице ItemMaster. В настоящее время я использую SQL Server,и с помощью временной таблицы, OpenXML и оператора Merge я могу успешно сделать это в хранимой процедуре.

Моя проблема в том, что я сделал это в MySQL с помощью хранимой процедуры. Зацикливание не требуется. Я понятия не имею, как это сделать, так как у меня не так много знаний о MySQL.

Что я уже пробовал:

Мою процедуру SQL сервера :

declare @XML xml =null,@XMLDOC Int

declare @TempTable Table(ItemID int, ItemName nvarchar(50))

EXEC sp_xml_preparedocument @XMLDOC output,
						
INSERT INTO @TempTable(ItemID, ItemName)
	SELECT UOMID from openXML (@XMLDOC,'NewDataSet/Table1',2)
					  with (ItemID int, ItemName nvarchar(50))

EXEC sp_xml_removedocument @XMLDOC	

MERGE ItemMaster as Target
Using(select ItemID,ItemName FROM @TempTable) as Source
ON(Target.Item_ID=Source.ItemID)
WHEN MATCHED THEN
	Update set Target.Item_ModifiedOn=GETDATE()
WHEN NOT MATCHED THEN
	INSERT(ItemName,Item_CreatedOn) 
	Values(Source.ItemName,GETDATE());

1 Ответов

Рейтинг:
0

Rohit Pai (rodude123)

Вы можете сделать это в c#.net сама по себе такая
Во-первых, вам придется скачать библиотеку MYSQL, которую можно найти через пакеты nugget.

2. Получить БД MySQL информацию, например, имя пользователя, пароль, хост и т. д. и любые другие данные, необходимые. Затем сделайте что-то вроде этого, что позволит вам подключиться к серверу
Вот пример:

MySqlConnection makeConnection()
{
    try
    {
        //connection information
        server = "localhost";
        database = "dbname";
        uid = "user";
        dbPassword = "password";
        string connectionString = "SERVER=" + server + ";" + "DATABASE=" +
        database + ";" + "UID=" + uid + ";" + "PASSWORD=" + dbPassword + ";";
        //connect to the database
        connection = new MySqlConnection();
        connection.ConnectionString = connectionString;
        connection.Open();
        return connection;
    }
    catch (MySqlException e)
    {
        //if anything goes wrong
        MessageBox.Show(@"Something has gone wrong here (Your own message here if you want)");
        Console.WriteLine(e.ToString());
        return connection;
    }
}

3.Вам нужно будет проверить, есть ли данные в базе данных.
Как вы это делаете?
Пройдитесь по каждому значению и проверьте, есть ли оно в базе данных.
Вот пример:
//checking each value in the database
MySqlConnection conn = makeConnection(); //using the connection method above
string[] values = new string[] { "string1", "string2", "string3", "string4", "string5", };
for (int i = 0; i < values.Length; i++)
{
    //.ExecuteScalar is used only to get single values
    string checkQuery = "SELECT col1 FROM table1 WHERE col1 = '" + values[i] + "'";
    MySqlCommand checkCommand = new MySqlCommand(checkQuery, conn);
    string checkValue = checkCommand.ExecuteScalar().ToString();
    if(checkValue == values[i])
    {
        //.ExecuteNonQuery only used for updating values inserting values etc.
        //things that don't need to return a value.
        string updateColumnQuery = "UPDATE table1 SET col2 = 'already here'";
        MySqlCommand updateColumnCommand = new MySqlCommand(updateColumnQuery, conn);
        updateColumnCommand.ExecuteNonQuery();
    }
    else
    {
        //Insert new value
        string insertColumnQuery = "INSERT INTO table1 (col1) VALUES('" 
+ values[i] +"')";
        MySqlCommand insertColumnCommand = new MySqlCommand(insertColumnQuery, conn);
        insertColumnCommand.ExecuteNonQuery();
    }
}


Надеюсь, это поможет, я сам не пробовал код, но в соответствии с моим предложением я думаю, что этот код должен работать. Просто не забудьте получить правильную информацию о БД, иначе это может привести к большому количеству ошибок. Это случилось со мной в первый раз, когда я использовал библиотеку MySQL c#. Надеюсь, ваша последняя работа будет завершена.
Rohit Pai, C#, HTML, CSS, JS, PHP, (Python все еще неполный)