【问题标题】:Can I INSERT a row at index n of a table?我可以在表的索引 n 处插入一行吗?
【发布时间】:2012-08-09 15:29:41
【问题描述】:

我知道我可以发送UNION - 但有更好的方法吗?我们使用动态SQL 并将其存储在表中,其中一些语句具有ORDER BY 子句。我必须在顶部位置添加一个动态的“全部”选项,该选项也存储在数据库中,以填充应用层中的下拉菜单。

我知道这是一个不稳定的解决方案,但我被应用程序的当前设计困住了。除了更改存储过程之外,另一个选项是向数据模型和应用层添加一堆代码。如果UNION 是我唯一/最好的选择,我可以做到。我只是想知道是否有更好的方法在数据库方面

另外,我不想讨论存储在数据库中的动态SQL 字符串的优点。这就是它的方式,这就是我必须使用的。谢谢大家!

【问题讨论】:

  • 在 SQL 数据库中,没有 pre-defined 顺序,例如您不能在“位置 42”处插入一行 - 没有这样的东西。仅当您选择数据并明确指定ORDER BY 子句时才定义顺序。如果您需要强制执行排序,您可以添加例如sequence (int) 列并用适当的值填充它,以便您可以执行 SELECT (list-of-cols) FROM dbo.YourTable ORDER BY sequence 并按您想要/需要的顺序取回数据。
  • 有一种即将来临的感觉。只是希望有办法。
  • 您可以使用NULL 值来表示“全部”吗?它将在任何其他值之前排序,或者可以使用 CASE 调整 ORDER BY 以将其放在排序的另一端。

标签: sql sql-server-2005 insert union


【解决方案1】:

听起来您现有的 ORDER BY 列不能满足您当前的需求。为什么不添加另一列明确详细说明下拉控件项的位置,然后在存储过程中按该列排序?

关于动态 SQL 的讲座我就不说了。小心用户输入是吗? ;)

【讨论】:

  • 注入不是我们如何做的问题。我们提供选项,所以除非我们注入我们自己的数据库,否则我们没问题。我会留意显示“DROP TABLE USERS;”的下拉项目; =)
  • ORDER BY 的问题在于它也被编码到存储的 SQL 字符串中。这些字符串被执行,这给了我必须添加的结果。我要给 UNION 一个机会,看看会发生什么。感谢您的帮助。
  • @Yatrix - 这听起来很棘手。这个其他 StackOverflow 问题是否相关,还是您在原始查询中所指的内容? stackoverflow.com/questions/5903149/…
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 2010-11-13
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多