2014-07-26 2 views
5

Я написал это для поиска строки в sql из любого столбца таблицы, но в некоторых случаях он реагирует ненормально. Пример приведен здесь.поиск строки в sql из любого столбца в таблице

declare @tablepay table 
(
    payno varchar(500), 
    lastmodified nvarchar(500) 
) 

declare @columnname table 
(
    [rownumber] INT IDENTITY, 
    colname varchar(500) 
) 

insert into @tablepay (payno, lastmodified) 
    select 'PAY/2014','abcd' 

insert into @columnname(colname) 
    select TN.N.value('local-name(.)', 'sysname') as ColumnName 
    from 
     (select TV.* 
     from (select 1) as D(N) 
     outer apply (select top(0) * from @tablepay) as TV for xml path(''), elements xsinil, type) as TX(X) 
     cross apply TX.X.nodes('*') as TN(N) 

DECLARE @count INT 
DECLARE @begincount INT 
DECLARE @clname as VARCHAR(50)=''; 

SET @begincount = 1 

select @count = count(*) from @columnname 

declare @tlname varchar(50) 
set @tlname = '@tablepay' 

WHILE @begincount <= @count 
BEGIN 
    set @clname = (select colname from @columnname where rownumber = @begincount) 

    declare @text as varchar(100) 

    select * from @tablepay where @clname like '%f%' 

    SET @begincount = @begincount + 1 
END 
+4

Пожалуйста, добавьте соответствующий тег RDBMS - это SQL Server? –

+1

Да, это SQL Server, здесь, когда я даю как «% f%», он возвращает строку. Но в этой строке нет «f» –

+0

Код, который вы опубликовали, не имеет смысла. Вы вставляете одну строку в '@ tablepay', затем вы выбираете из нее _ использование предложения where, которое не имеет отношения к записям в таблице_. Короче говоря, ваш код не имеет абсолютно никакого смысла. –

ответ

1

when I give like '%f%' it returns a row. But in that row there is no 'f' Вы сказали

Это должно быть правильным. В нижеприведенном запросе @clname не является частью переменной таблицы @tablepay. поэтому он просто проверяет, содержит ли значение @clname значение f, и если true возвращает строку из таблицы @tablepay, но это не гарантирует, что эта таблица @tablepay должна содержать строку, содержащую символ в его столбце.

select * from @tablepay where @clname like '%f%' 

За Структура вами таблицы @tablepay ниже

declare @tablepay table 
(
    payno varchar(500), 
    lastmodified nvarchar(500) 
) 

Если вы хотите найти символ f в столбцах этой таблицы, то поиск столбцов таблицы непосредственно как

select * from @tablepay where payno like '%f%' OR lastmodified like '%f%' 
+0

Можете ли вы предложить способ поиска аналогичной строки в конкретной таблице во всех столбцах –

+0

Проверьте отредактированный ответ. – Rahul

+0

здесь, в этом случае, как я могу динамически передавать имя столбца? –

0

Пожалуйста, см этот существующий ответ для примера того, что я THINK Вы запрашиваете:

Selecting column names that have specified value

Этот конкретный ответ поиск всех строк столбцов во всех таблиц в базе данных. Вы можете легко изменить его для поиска всех столбцов строки только в одной конкретной таблице. Это должно дать вам рамки, которые вам нужно настроить, чтобы получить то, что вы хотите.

Смежные вопросы