SQL:对INSERT和UPDATE使用相同的字符串?

Axi*_*ili 3 sql insert sql-update

我一直在使用的INSERT语法是这样的

INSERT INTO TableName VALUES (...)
Run Code Online (Sandbox Code Playgroud)

我一直在使用的UPDATE语法是

UPDATE TableName SET ColumnName=Value WHERE ...
Run Code Online (Sandbox Code Playgroud)

所以在我的所有代码中,我必须生成2个字符串,这将产生类似的结果

insertStr = "(27, 'John Brown', 102)";
updateStr = "ID=27, Name='John Brown', ItemID=102";
Run Code Online (Sandbox Code Playgroud)

然后单独使用它们

"UPDATE TableName SET " + updateStr + " WHERE ID=27 " +
"IF @@ROWCOUNT=0 "+
"INSERT INTO TableName VALUES (" + insertStr + ")"
Run Code Online (Sandbox Code Playgroud)

当我使用30列的表格时,它开始困扰我.

我们不能生成只在INSERT和UPDATE上使用的一个字符串吗?

例如.在UPDATE语句上使用insertStr或在INSERT语句上使用updateStr,还是一种全新的方式?

Jos*_*lio 7

我认为你需要一种全新的方法.您对SQL Injection持开放态度.为我们提供一些示例代码,说明如何获取数据输入并将语句发送到数据库. alt text http://goose.ycp.edu/~weddins/440/S09%20IFS440%20Bobby%20Drop%20Tables.PNG

  • 学习更好的编程实践总是相关的. (4认同)
  • 我同意.如果这是生产代码,则至少应该使用参数化语句.告诉我们你正在使用什么语言,也许你可以想出一个更好的方法,比如对象持久性. (2认同)

zom*_*bat 6

据我所知,你所描述的内容在ANSI SQL中是不可能的,或者我所知道的任何扩展.但是,我对MySQL很熟悉,它可能完全取决于你正在使用的RDBMS.例如,MySQL具有"INSERT ... ON DUPLICATE KEY UPDATE ..."语法,类似于您在那里发布的语法,并将INSERT查询与UPDATE查询组合在一起.好处是你将两个可能的操作组合成一个查询,但是,查询的INSERT和UPDATE部分确实是不同的.

通常,这种事情可以通过应用程序中的ORM层抽象出来.就原始SQL而言,我会对任何按您描述的方式工作的语法感兴趣.