Здравствуйте, rameel, Вы писали:
Добавлю также, что для некоторых баз, например Postgre, запрос выглядит с фиктивной таблицей Dual
INSERT INTO Roles(Name)
SELECT 'Admin'
FROM Dual
WHERE
NOT EXISTS(SELECT * FROM Roles WHERE Name = 'Admin');
Для MSSQL это не обязательно
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Здравствуйте, rameel, Вы писали:
IT>>Для начала хорошо бы это выразить на SQL.
R>Ровно так как в примере выше В общем, например, есть такая таблица:
Не знал, что INSERT SELECT можно использовать без FROM. В общем, век живи, век учись, всё равно дураком помрёшь.
Для такого случая лучше всего будет сделать перегрузку Insert/InsertWithIdentity с предикатом.
Задался тут вопросом, можно ли такой запрос создать посредством линка? Смысл в том, чтобы добавить запись в таблицу только если ее там нет.
INSERT TestTable(Data)
SELECT 'value'
WHERE
NOT EXISTS(SELECT Data FROM TestTable WHERE Data = 'value');
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Здравствуйте, IT, Вы писали:
R>>Задался тут вопросом, можно ли такой запрос создать посредством линка? Смысл в том, чтобы добавить запись в таблицу только если ее там нет.
IT>Для начала хорошо бы это выразить на SQL.
Ровно так как в примере выше
В общем, например, есть такая таблица:
CREATE TABLE Roles (
ID INT NOT NULL PRIMARY KEY CLUSTERED IDENTITY(1,1),
Name NVARCHAR(50) NOT NULL UNIQUE
);
INSERT INTO Roles(Name) VALUES(N'Admin');
INSERT INTO Roles(Name) VALUES(N'Manager');
INSERT INTO Roles(Name) VALUES(N'Editor');
Теперь, если попытаться добавить запись Admin, то чтобы не кидаться исключением о том, что такая запись уже есть, нужно проверить ее наличие перед вставкой, хотя можно было бы объединить проверку и вставку в одном запросе:
INSERT INTO Roles(Name)
SELECT N'Admin'
WHERE
NOT EXISTS(SELECT * FROM Roles WHERE Name = N'Admin');
Впрочем, это чисто так сказать интерес академический, так как в коде и так все лаконично:
using (var db = _factory.CreateDbManager())
if (!db.Roles.Any(r => r.Name == name))
new SqlQuery().Insert(db, new Role {Name = name});
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>