在SQL Server中插入INTO语法

Ale*_*dih 19 sql sql-server

我来自mySQL到SQL Server.SQL Server中的以下语法不起作用吗?

 INSERT INTO table SET fil1="234", fil2="324"
Run Code Online (Sandbox Code Playgroud)

SQL Server中是否有类似的声明?

JK.*_*JK. 15

INSERT INTO table (fil1, fil2) VALUES ('234', '324');
Run Code Online (Sandbox Code Playgroud)

  • 插入只有这种语法?(好可怜) (5认同)
  • 不一定是坏事.因为它不是SQL标准. (4认同)
  • @Kak:是的,这是 MySql 的一个有吸引力的功能,其他 rdbms 没有。MySql 替代插入语法看起来像属性初始值设定项,字段和值彼此相邻。更容易阅读 (2认同)
  • 我希望他们将这种语法添加到Sql Server中,因此它看起来更像C#.**INSERT员工(fil1:'234',fil2:'234')**:-) (2认同)

小智 9

只有一个很大的麻烦,有一个独特的INSERT和Update语句.如果必须使用包含30列的表,您将很容易理解.

MySQL变体允许我一次编写代码 - 它完成了两件事 - 实际上我只需要在查询字符串中替换命令的名称.

MSSQL变体通过使用几乎相同的代码(关于字段名和数据来填充字段)来引发错误2次.

如果我以后只更改一个字段名称就意味着更改2个代码位置 - 无论哪种方式我在MSSQL中都这样做.必须更改存储过程以及在我的代码中调用它的insert语句.或者需要更改插入和更新所需的2个不同语句.这个明显的错误源在MSSQL上完全被指责(至少从我的观点来看).


Tim*_*ter 8

SET插入记录的方法是不是标准的SQL.如果您需要使用类似的sql进行更新和插入,则应该使用MS SQL-Server中的Stored-Procedures,例如:

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
Run Code Online (Sandbox Code Playgroud)