Я прихожу из mySQL в SQL Server. Не работает ли следующий синтаксис в SQL Server?
INSERT INTO table SET fil1="234", fil2="324"
Есть ли сопоставимый оператор в SQL Server?
Я прихожу из mySQL в SQL Server. Не работает ли следующий синтаксис в SQL Server?
INSERT INTO table SET fil1="234", fil2="324"
Есть ли сопоставимый оператор в SQL Server?
Способ вставки записей SET
не является стандартным SQL. Если вам нужно использовать подобный sql для обновлений и вставок, вместо этого следует использовать хранимые процедуры в MS SQL-Server, например:
CREATE Procedure tableInsertUpdate
(
@ID int,
@fil1 int,
@fil2 int,
@IDOut int OUTPUT
)
AS
IF EXISTS(SELECT ID from table WHERE [email protected])
BEGIN
UPDATE table SET
fil1 = @fil1
fil2 = @fil2
WHERE [email protected]
SET @IDOut=null
END
ELSE
BEGIN
INSERT INTO table
(fil1, fil2)
VALUES
(@fil1, @fil2 )
SET @IDOut=scope_identity()
END
INSERT INTO table (fil1, fil2) VALUES ('234', '324');
Это только большая проблема, имеющая уникальный оператор INSERT и Update. Вы легко поймете, если вам нужно работать с таблицами, содержащими 30 столбцов.
Вариант MySQL позволяет мне писать код один раз - и он делает все необходимое - на самом деле мне нужно только заменить имя команды в строке запроса.
Вариант MSSQL провоцирует ошибки, дважды используя один и тот же код (в отношении полей и данных для заполнения полей).
И если позже я изменю только одно имя поля, это означает изменение 2 позиций кода - в любом случае я делаю это в MSSQL. Хранимая процедура должна быть изменена, и оператор insert, который вызывает его в моем коде. Или в противном случае необходимо изменить 2 разных оператора для вставки и обновления. Этот очевидный источник ошибок полностью обвиняется (по крайней мере, с моей точки зрения) в MSSQL.