gpt4 book ai didi

sql - 关键字 SQL Server 存储过程

转载 作者:行者123 更新时间:2023-12-04 22:36:26 31 4
gpt4 key购买 nike

我是 SQL Server 的新手,但我必须编写一个存储过程来搜索带有关键字列表的特定表,并且假设返回已找到命中的行,我写了一个有效的查询但问题是当我必须修改关键字列表时,我必须从头开始编写查询。

查询如下

SELECT * 
INTO [playground].[dbo].[New table name]
FROM [playground].[dbo].[Main table]
WHERE [Document Type Description] LIKE 'Alcohol'
OR [Document Type Description] LIKE 'DSTV'
OR [Document Type Description] LIKE 'Entertainment' OR
[Document Type Description]like'Bday' OR
[Document Type Description]like'Birthday' OR
[Document Type Description]like'Bar' OR
[Document Type Description]like'Booze' OR
[Document Type Description]like'Catering' OR
[Document Type Description]like'Farewell' OR
[Document Type Description]like'Food' OR
[Document Type Description]like'Function' OR
[Document Type Description]like'Meals' OR
[Document Type Description]like'Year end functions' OR
[Document Type Description]like'Womens day' OR
[Document Type Description]like'Womans day' OR
[Document Type Description]like'Tuck shop' OR
[Document Type Description]like'Teambuilding' OR
[Document Type Description]like'Refreshment' OR
[Document Type Description]like'Liquor' OR
[Document Type Description]like'Lunch' OR
[Document Type Description]like'Water' OR
[Document Type Description]like'Bread' OR
[Document Type Description]like'Breakaway' OR
[Document Type Description]like'Canteen' OR
[Document Type Description]like'Gifts' OR
[Document Type Description]like'Glass' OR
[Document Type Description]like'Glasses' OR
[Document Type Description]like'Glassware' OR
[Document Type Description]like'Ticket' OR
[Document Type Description]like'Rugby' OR
[Document Type Description]like'Cricket' OR
[Document Type Description]like'Tea cups' OR
[Document Type Description]like'Tea' OR
[Document Type Description]like'Sugar bowl' OR
[Document Type Description]like'Sugar' OR
[Document Type Description]like'Soup bowls' OR
[Document Type Description]like'Side plate' OR
[Document Type Description]like'Serving tray' OR
[Document Type Description]like'Saucers' OR
[Document Type Description]like'Tray' OR
[Document Type Description]like'Non slip tray' OR
[Document Type Description]like'Milk' OR
[Document Type Description]like'Milk jug' OR
[Document Type Description]like'Mugs' OR
[Document Type Description]like'Dessert' OR
[Document Type Description]like'Dessert spoons' OR
[Document Type Description]like'Dinner set' OR
[Document Type Description]like'Jug' OR
[Document Type Description]like'Kent' OR
[Document Type Description]like'Knifes' OR
[Document Type Description]like'Knives' OR
[Document Type Description]like'Cooler boxes' OR
[Document Type Description]like'Crockery' OR
[Document Type Description]like'Christmas' OR
[Document Type Description]like'Coffee' OR
[Document Type Description]like'Popcorn machine' OR
[Document Type Description]like'Cooler' OR
[Document Type Description]like'Freezer' OR
[Document Type Description]like'Fridge' OR
[Document Type Description]like'Fan ' OR
[Document Type Description]like'Extraction fan' OR
[Document Type Description]like'Heaters' OR
[Document Type Description]like'Water cooler' OR
[Document Type Description]like'Washing machine' OR
[Document Type Description]like'Warmer' OR
[Document Type Description]like'Vacuum cleaner' OR
[Document Type Description]like'Urn' OR
[Document Type Description]like'Thermostat'

最终我希望我有一个 SP 可以读取关键字数组并让我选择要在主表中搜索的表列

希望这是有道理的提前谢谢你

最佳答案

关于您的代码的一些想法。

LIKE的使用
您放置查询的方式实际上执行相等性检查,因为您没有在 LIKE 语句中放置通配符。这会导致两个问题:

  1. 您可能得不到预期的结果
  2. 你可能没有使用索引(这会加快速度)因为你使用了 LIKE

首先,您需要决定是否要检查是否相等,或者搜索的字段是否应该包含您要查找的字符串。

如果你想要一个平等检查,使用

... WHERE [Field] = 'value'

代替

... WHERE [Field] LIKE 'value'

平等检查
有几种方法可以加快它们的速度。您可以将搜索词放在一个表中并执行如下操作:

... WHERE [Field] in (SELECT Term FROM TableOfSearchTerms)

或者您甚至可以尝试将两个表连接在一起。那么你根本不需要 WHERE 子句:

... FROM Table1 t1 INNER JOIN TableOfSearchTerms terms ON terms.Term = t1.[Field]

使搜索字段动态化
这并不容易。您可以创建一个动态 SQL 语句作为字符串,然后使用 EXEC 来执行它,但您必须小心不要引入问题(如 SQL 注入(inject)等)。

执行实际的LIKE
在这种情况下,您需要在语句中使用通配符,如下所示:

... WHERE [Field] LIKE `%searchterm%`

使用我上面所说的方法解决这个问题并不容易。在那种情况下(尽管这样说让我很伤心)可能最简单的方法是组合一个包含查询的字符串并使用 EXEC 执行它。结果可能如下所示:

DECLARE @query NVARCHAR(max)
SET @query = "INSERT INTO ... WHERE ";

EXEC (@query)

您可以在搜索词表上使用游标,将所需的 LIKE 添加到 WHERE 子句。

关于sql - 关键字 SQL Server 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35892117/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com