【问题标题】:How can I split a T-SQL Command如何拆分 T-SQL 命令
【发布时间】:2019-05-13 07:14:09
【问题描述】:

如何将 T-SQL 命令拆分为

SELECT    FROM    WHERE    GROUP

例如我需要拆分这个命令

Text To lcSQLCommand TextMerge NoShow Flags 1 Pretext 15
         SELECT a.HabitacionID, a.TipoID, b.AlquilerID, b.Desde, b.Hasta, IFNULL(b.Estado, 0) Estado,
                 c.Habitacion, c.Precio1 Precio
                 FROM habitaciones a
                      LEFT JOIN (SELECT HabitacionID, AlquilerID, Desde, Hasta, Estado
                                        FROM alquiler 
                                        WHERE (Estado = 2 AND Desde <= CURDATE()) OR Estado = 1
                                        ) b ON a.HabitacionID = b.HabitacionID
                      LEFT JOIN habitaciones_tipo c ON a.TipoID = c.TipoID
EndText

lcSQLSelect = "SELECT a.HabitacionID, a.TipoID, b.AlquilerID, b.Desde, b.Hasta, IFNULL(b.Estado, 0) Estado, c.Habitacion, c.Precio1 Precio"

lcSQLFrom = "FROM habitaciones a LEFT JOIN (SELECT HabitacionID, AlquilerID, Desde, Hasta, Estado FROM alquiler WHERE (Estado = 2 AND Desde <= CURDATE()) OR Estado = 1) b ON a.HabitacionID = b.HabitacionID LEFT JOIN habitaciones_tipo c ON a.TipoID = c.TipoID"

lcWhere = "" && No Where in this command

lcGroup = "" && No Group un this command

最好的问候

泽罗伯托

文本到 lcSQLCommand TextMerge NoShow Flags 1 Pretext 15 选择 a.HabitacionID、a.TipoID、b.AlquilerID、b.Desde、b.Hasta、IFNULL(b.Estado, 0) Estado, c.Habitacion, c.Precio1 Precio FROM habitaciones a 左连接(选择 HabitacionID、AlquilerID、Desde、Hasta、Estado 来自 alquiler WHERE (Estado = 2 AND Desde

lcSQLSelect = "SELECT a.HabitacionID, a.TipoID, b.AlquilerID, b.Desde, b.Hasta, IFNULL(b.Estado, 0) Estado, c.Habitacion, c.Precio1 Precio"

lcSQLFrom = "FROM habitaciones a LEFT JOIN (SELECT HabitacionID, AlquilerID, Desde, Hasta, Estado FROM alquiler WHERE (Estado = 2 AND Desde <= CURDATE()) OR Estado = 1) b ON a.HabitacionID = b.HabitacionID LEFT JOIN habitaciones_tipo c ON a.TipoID = c.TipoID"

lcWhere = "" && No Where in this command

lcGroup = "" && No Group un this command

【问题讨论】:

  • 您可以使用 TSQL 解析器将语句分解为单个元素,然后根据需要重新组合各个子句。

标签: tsql split command-line-arguments visual-foxpro


【解决方案1】:

看看STREXTRACT() 函数。它允许您通过指定开始和结束分隔符来将字符串分开。因此,例如,要获取字段列表,您可以使用:

lcFieldList = STREXTRACT(lcSQLCommand, "SELECT", "FROM")

对于您需要的其余部分,它变得更加棘手,因为您必须检查 WHERE 和 GROUP BY 关键字的存在才能确切知道您有哪些分隔符,但整个事情不应超过 15 个或 20 行。

注意:我假设您想在 VFP 中执行此操作。

【讨论】:

  • 也许它可以是一个 DLL 库,允许我在 VFP 中使用它
  • 您应该能够在 T-SQL 中执行类似的操作。但是你为什么要拆分查询呢?这里的目标是什么?
  • 我有一个 SQLTable 对象 Text To lcSQLCommand TextMerge NoShow Flags 1 Pretext 15 SELECT a.HabitacionID, a.TipoID, b.AlquilerID, b.Desde, b.Hasta, IFNULL(b. Estado, 0) Estado, .... EndText loTable = NewObject("SQLTable", "MySQL.Vcx") loTable.Open(lcSQLCommand, "habitaciones", "AlquilerID") 在内部分离 T-SQL 命令,因为当我想做一个搜索,我只做这个 loTable.Retrieve("b.AlquilerID = 5") 谢谢
  • @TamarE.Granor 当有像SelectionIdFromDate这样的对象名称时,情况会变得更加复杂。
  • @HABO 好点。为此,应该在 STEXTRACT() 命令中包含尾随空格。
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2017-05-06
  • 2014-12-06
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
相关资源
最近更新 更多