我有一个在一列中包含字符串的表,这些字符串实际上存储了以前编写的其他SQL查询,并存储以供以后运行。它们包含“@organisationId”或“@ enterDateHere”等参数。我希望能够提取这些参数。
示例:
| 识别码|查询|
| - -|- -|
| 一个|SELECT * FROM表WHERE标识= @组织标识|
| 2个|SELECT * FROM主题WHERE创建时间〈=@开始日期AND创建时间〉= @结束日期AND标识= @输入组织此处|
| 三个|SELECT名称+ '@' +域FROM用户|
我需要以下内容:
| 识别码|参数|
| - -|- -|
| 一个|@组织ID|
| 2个|@开始日期,@结束日期,@在此处输入组织|
| 三个|空值|
不需要担心如何分开/列出它们,只要它们是清晰可见的,只要查询列出了所有它们,我不知道它们的数量。请注意,有时候查询只包含@,例如当电子邮件绑定正在进行时,但它不是一个参数。我只需要以@开头的字符串,并且在它后面至少有一个字母,以非字母字符结尾(空格、回车、逗号、分号)。如果这会导致问题,那么返回所有以@开头的字符串,我将简单地手动识别参数。
如果需要,它可以包括Excel/Python/C#的使用,但SQL是首选。
4条答案
按热度按时间e3bfsja21#
询问参数的正式方法是使用sp_describe_undeclared_parameters,例如
lvmkulzt2#
通过XML和XQuery使用标记化实现非常简单。
值得注意的要点:
1.第1x 1 m0n1x正在将查询列标记为XML
1.第二个
CROSS APPLY
正在筛选出没有“@”符号的标记。SQL #1
SQL #2
添加了一个清理步骤,以首先处理常规空格以外的空格。
输出
| 识别码|参数|
| - -|- -|
| 一个|@组织ID|
| 2个|@开始日期@结束日期@在此处输入组织|
| 三个|空值|
azpvetkf3#
你可以使用字符串分割,然后去掉不需要的字符,下面是一个查询:
zynd9foi4#
使用SQLServer进行解析是一个非常糟糕的主意,因为性能低,而且缺乏工具。我强烈推荐使用.net汇编或外部语言(因为你的项目是在python中),但是,作为最后的手段,你可以使用类似于这样的非常慢而且通常很糟糕的代码(这段代码只适用于SQL Server 2017+,顺便说一句。在早期版本的代码将可怕得多):