gpt4 book ai didi

sql - where子句从sql server中的多个列中搜索值

转载 作者:行者123 更新时间:2023-12-01 15:48:41 24 4
gpt4 key购买 nike

我有一个包含 51 列的 sql server 表,如下所示

编号备注1备注2...备注50

我需要搜索特定字符串是否出现在至少一个备注字段中,如下例所示

id  remarks1  remarks2   remarks3  remarks4
1 key nonkey grabaze jjjjj
2 uuu 888 8888 kkk
3 888 key hjhj kjkj

假设我需要搜索存在于备注 1、2、3..... 或 50 中的 key

我可以有类似的sql

select id from tbl where remarks1 ='key' or remarks2='key' and so on ..

写入或查询多达 50 列真的不切实际..我们有什么快速方法吗?

最佳答案

您可以尝试使用下面的存储过程。

    CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname 
AS

DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)

BEGIN TRY
SET @sqlCommand = 'SELECT * FROM [' + @schema + '].[' + @table + '] WHERE'
SET @where = ''

SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ''' + @schema + '''
AND TABLE_NAME = ''' + @table + '''
AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')'

EXEC (@cursor)

OPEN col_cursor
FETCH NEXT FROM col_cursor INTO @columnName

WHILE @@FETCH_STATUS = 0
BEGIN
IF @where <> ''
SET @where = @where + ' OR'

SET @where = @where + ' [' + @columnName + '] LIKE ''' + @stringToFind + ''''
FETCH NEXT FROM col_cursor INTO @columnName
END

CLOSE col_cursor
DEALLOCATE col_cursor

SET @sqlCommand = @sqlCommand + @where
--PRINT @sqlCommand
EXEC (@sqlCommand)
END TRY
BEGIN CATCH
PRINT 'There was an error. Check to make sure object exists.'
IF CURSOR_STATUS('variable', 'col_cursor') <> -3
BEGIN
CLOSE col_cursor
DEALLOCATE col_cursor
END
END CATCH

存储过程在 master 数据库中创建,因此您可以在任何数据库中使用它,它需要三个参数:

stringToFind - 这是您要查找的字符串。这可以是一个简单的值,如“test”,或者您也可以使用 % 通配符,例如“%test%”、“%test”或“test%”。

架构 - 这是对象的架构所有者

table - 这是您要搜索的表名,该过程将搜索表中的所有 char、nchar、ntext、nvarchar、text 和 varchar 列

Source

关于sql - where子句从sql server中的多个列中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21373978/

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