2014-07-26 15 views
5

Tôi đã viết này để tìm kiếm một chuỗi trong sql từ bất kỳ cột nào trong một bảng nhưng trong một số trường hợp, nó phản hồi bất thường. Ví dụ được đưa ra ở đây.tìm kiếm một chuỗi trong sql từ bất kỳ cột nào trong một bảng

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

Vui lòng mở rộng 'trả lời bất thường' và vui lòng thêm thẻ RDBMS thích hợp - có phải là SQL Server không? –

+1

Có đây là SQL Server, ở đây khi tôi đưa ra như '% f%' nó trả về một hàng. Nhưng trong hàng đó không có 'f' –

+0

Mã bạn đã đăng không có ý nghĩa. Bạn chèn một hàng vào '@ tablepay', sau đó bạn chọn từ nó _using một mệnh đề where không có liên quan đến các bản ghi trong bảng_. Trong ngắn hạn mã của bạn làm cho hoàn toàn không có ý nghĩa. –

Trả lời

1

Bạn nói when I give like '%f%' it returns a row. But in that row there is no 'f'

Đó nên là chính xác. Trong truy vấn dưới đây của bạn @clname không phải là một phần của biến bảng @tablepay. do đó, nó chỉ kiểm tra xem giá trị tham số @clname có chứa f ký tự trong đó và nếu true hàng trả lại từ bảng @tablepay nhưng điều đó không đảm bảo ở tất cả bảng đó @tablepay phải có hàng có chứa ký tự f ở trên cột của anh ấy.

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

mỗi Cấu trúc của bạn bảng @tablepay như sau

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

Nếu bạn muốn tìm kiếm cho nhân vật f sau đó tìm kiếm các cột của bảng trực tiếp như

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

Bạn có thể đề xuất một cách để tìm kiếm một chuỗi tương tự trong bảng cụ thể trong tất cả các cột –

+0

Kiểm tra câu trả lời đã chỉnh sửa hay không. – Rahul

+0

ở đây trong trường hợp này làm thế nào tôi có thể chuyển tên cột động? –

0

Xin vui lòng xem trong các cột của bảng câu trả lời hiện tại này cho một ví dụ về những gì tôi THINK bạn đang yêu cầu:

Selecting column names that have specified value

câu trả lời cụ này tìm kiếm tất cả các cột chuỗi trong tất cả các bảng trong cơ sở dữ liệu. Bạn có thể dễ dàng sửa đổi nó để tìm kiếm tất cả các cột chuỗi chỉ trong một bảng cụ thể. Nó sẽ cung cấp cho bạn khuôn khổ bạn cần để tinh chỉnh để có được những gì bạn muốn.

Các vấn đề liên quan