我来自mySQL到SQL Server。 SQL Server中的以下语法不起作用吗?
INSERT INTO table SET fil1="234", fil2="324"
SQL Server中是否有类似的声明?
答案 0 :(得分:15)
INSERT INTO table (fil1, fil2) VALUES ('234', '324');
答案 1 :(得分:9)
只有一个很大的麻烦,有一个独特的INSERT和Update语句。如果必须处理包含30列的表,您将很容易理解。
MySQL变体允许我一次编写代码 - 它完成了两件事 - 实际上我只需要在查询字符串中替换命令的名称。
MSSQL变体通过使用几乎相同的代码(关于填充字段的字段名和数据)来引发错误2次。
如果我稍后只更改一个字段名称,则意味着更改2个代码位置 - 无论哪种方式,我都会在MSSQL中执行此操作。必须更改存储过程以及在我的代码中调用它的insert语句。或者需要更改插入和更新所需的2个不同语句。这个明显的错误源在MSSQL上完全被指责(至少从我的角度来看)。
答案 2 :(得分:8)
SET
插入记录的方式不是standard 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 ID=@ID)
BEGIN
UPDATE table SET
fil1 = @fil1
fil2 = @fil2
WHERE ID=@ID
SET @IDOut=null
END
ELSE
BEGIN
INSERT INTO table
(fil1, fil2)
VALUES
(@fil1, @fil2 )
SET @IDOut=scope_identity()
END