5

假设该表具有 、 等列akey1以及bkey2更多ckey3类似的列。
有没有办法寻找一个共同的价值

SELECT * FROM table WHERE %key% LIKE 'xyz'

除了使用多个 AND , OR 条件。解决方案是否特定于 DBMS 都没关系。

4

2 回答 2

13

缺少动态 sql,您将不得不拼出每个列名。但是您可以获得一些语法快捷方式,并且只列出一次常量:

SELECT * FROM table WHERE 'xyz' IN (akey1, bkey2, ckey3)

使用动态 sql,您仍然必须发出相同的查询...但是您至少可以先使用字符串工具来构建它,如果您想使用通配符匹配,您可以在information_schema.columns视图中查找它们。但是,这涉及打开和迭代游标或将列数据返回给客户端,其中任何一个都涉及到更多的工作,而不仅仅是在原始查询中列出列名。希望您在开始向它发出查询之前至少对您的数据库有足够的了解。

于 2013-01-02T02:45:51.080 回答
0

你也可以试试这个方法

ALTER PROCEDURE USP_GetClinicNameList
	 
	 @SearchStr varchar(50)
AS
BEGIN

SET @SearchStr = RTRIM(@SearchStr) + '%'

SELECT TOP (10)
	*
FROM clinic c
WHERE c.cclinicname LIKE @SearchStr
OR c.caddress1 LIKE @SearchStr
OR c.caddress2 LIKE @SearchStr
OR c.ccity LIKE @SearchStr
OR c.cstate LIKE @SearchStr
OR c.cclinicid LIKE @SearchStr
OR c.czip LIKE @SearchStr
OR c.ccliniccode LIKE @SearchStr
OR c.cphone LIKE @SearchStr
ORDER BY c.cclinicname

END
GO

希望它会更容易理解。

于 2015-07-31T13:42:13.247 回答