Как сделать мой запрос более точным на основе моего условия для возврата строки
Я создаю строковую функцию, которая проверяет дублирующуюся запись перед вставкой или обновлением записи, но у меня есть условие с ней. Прежде чем давать условия, у меня есть таблица под названием Products (name, description, type, isenabled, InsertedDate, UpdatedDate). Значение в тип данных бит (0 или 1). И InsertedDate, UpdatedDate генерируются автоматически.
В столбце isEnables
0-выключено
1 означает включить
Перед вставкой проверьте, является ли имя уникальным, но если имя существует более одного, то,
Мое состояние
1. Проверьте, является ли продукт isEnabled = 1, затем при вставке данных должно появиться сообщение "продукт существует в таблице."
2. Проверьте, является ли продукт isEnabled = 0, затем при вставке данных должно появиться сообщение "продукт существует, но он отключен."
3. Еще вставить/обновить данные.
Ниже функция только проверяет, существует ли запись или нет, и соответственно возвращает сообщение.
Вопрос:
How can I have return proper message regardless I am checking above query for inserting or updating a record and it goes over my requirement. As Top 1 can help me to insert new record checking if name is unique and it will return empty but if I am updating row with its own keeping name as it is and changing other column which is description. And when I update that I am receiving message "Record exist in the table" which it should not give me and should updating without message. So how can I make this query check for both the method **inserting and updating** record.
Что я уже пробовал:
private string GetName(string name, int id) { using (var connection = connection string) using (var command = new SqlCommand()) { command.Connection = connection; command.CommandText = @"DECLARE @Enabled INT; " + @"SET @Enabled = " + @"( " + @"SELECT TOP 2 p.isEnabled" + @"FROM dbo.[product] p WITH (nolock) " + @"WHERE p.name = @name " + @"); " + @"SELECT Msg = CONVERT( VARCHAR(32), " + @"CASE " + @"WHEN @Enabled = 0 " + @"THEN 'Record is disabled' " + @"WHEN @Enabled = 2 " + @"THEN 'Record exist in the table' " + @"ELSE ''"; @"END);"; command.Parameters.AddWithValue("name", name); command.CommandTimeout = 100; connection.Open(); command.ExecuteNonQuery(); string message = (string)command.ExecuteScalar(); connection.Close(); return message; } } return string.Empty; }
CHill60
Есть проблема с вашими условиями:
1. Если продукт уже существует в таблице, вы должны не" вставлять данные", а обновлять их.
2. то же самое относится и здесь - непонятно, почему вы хотите знать, отключен он или нет
3.Вы не можете обновить данные, если строка еще не существует, вы можете только вставить.
Можете ли вы уточнить, когда вы будете вставлять данные и когда вы будете их обновлять? Нет необходимости в топ-2, так как вы пытаетесь убедиться, что каждое [имя] уникально.