2014-07-26 6 views
5

Ich schrieb dies für die Suche einer Zeichenfolge in SQL aus einer beliebigen Spalte in einer Tabelle, aber in einigen Fällen reagiert es abnormal. Das Beispiel ist hier angegeben.Suche einer Zeichenfolge in SQL aus einer beliebigen Spalte in einer Tabelle

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

Bitte erweitern Sie auf "anormal reagieren" und fügen Sie bitte das entsprechende RDBMS-Tag - ist es SQL Server? –

+1

Ja das ist SQL Server, hier gebe ich wie '% f%' eine Zeile zurück. Aber in dieser Zeile gibt es kein 'f' –

+0

Der Code, den Sie gepostet haben, macht keinen Sinn. Sie fügen eine einzelne Zeile in '@ tablepay' ein, dann wählen Sie daraus _eine where-Klausel aus, die keine Beziehung zu den Datensätzen in der Tabelle_ aufweist. Kurz gesagt macht dein Code absolut keinen Sinn. –

Antwort

1

Sie sagte when I give like '%f%' it returns a row. But in that row there is no 'f'

Das ist richtig sein sollte. In Ihrer folgenden Abfrage ist @clname kein Teil der Tabellenvariablen @tablepay. Überprüfen Sie einfach, ob der @clname Parameterwert f Zeichen enthält und wenn true die Zeile aus der Tabelle @tablepay zurückgibt, aber das garantiert nicht, dass die Tabelle @tablepay eine Zeile haben muss, die f Zeichen in einer Spalte enthält.

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

Per Aufbau Sie Tabelle @tablepay wie unten

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

Wenn Sie Zeichen f in den Spalten der Tabelle suchen möchten dann Tabellenspalten direkt wie

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

Können Sie eine Möglichkeit zum Suchen einer ähnlichen Zeichenfolge in einer bestimmten Tabelle in allen Spalten vorschlagen –

+0

Überprüfen Sie die bearbeitete Antwort. – Rahul

+0

hier in diesem Fall wie kann ich Spalte Name dynamisch übergeben? –

0

Bitte sehen suchen Diese existierende Antwort für ein Beispiel von dem, was ich THINK fragen Sie:

Selecting column names that have specified value

Diese spezielle Antwort durchsucht alle Stringspalten in allen Tabellen in der Datenbank. Sie können es leicht ändern, um nach allen String-Spalten in nur einer bestimmten Tabelle zu suchen. Es sollte Ihnen den Rahmen geben, den Sie brauchen, um zu optimieren, um zu bekommen, was Sie wollen.

Verwandte Themen