Phương pháp đầu tiên (Tested) Đầu tiên get danh sách các cột trong biến chuỗi phân cách bằng dấu phẩy và sau đó bạn có thể tìm kiếm 'foo' sử dụng biến bằng cách sử dụng IN
Kiểm tra thủ tục lưu trữ dưới đây mà đầu tiên được cột và sau đó tìm kiếm chuỗi:
DECLARE @TABLE_NAME VARCHAR(128)
DECLARE @SCHEMA_NAME VARCHAR(128)
-----------------------------------------------------------------------
-- Set up the name of the table here :
SET @TABLE_NAME = 'testing'
-- Set up the name of the schema here, or just leave set to 'dbo' :
SET @SCHEMA_NAME = 'dbo'
-----------------------------------------------------------------------
DECLARE @vvc_ColumnName VARCHAR(128)
DECLARE @vvc_ColumnList VARCHAR(MAX)
IF @SCHEMA_NAME =''
BEGIN
PRINT 'Error : No schema defined!'
RETURN
END
IF NOT EXISTS (SELECT * FROM sys.tables T JOIN sys.schemas S
ON T.schema_id=S.schema_id
WHERE [email protected]_NAME AND [email protected]_NAME)
BEGIN
PRINT 'Error : The table '''[email protected]_NAME+''' in schema '''+
@SCHEMA_NAME+''' does not exist in this database!'
RETURN
END
DECLARE TableCursor CURSOR FAST_FORWARD FOR
SELECT CASE WHEN PATINDEX('% %',C.name) > 0
THEN '['+ C.name +']'
ELSE C.name
END
FROM sys.columns C
JOIN sys.tables T
ON C.object_id = T.object_id
JOIN sys.schemas S
ON S.schema_id = T.schema_id
WHERE T.name = @TABLE_NAME
AND S.name = @SCHEMA_NAME
ORDER BY column_id
SET @vvc_ColumnList=''
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @vvc_ColumnName
WHILE @@FETCH_STATUS=0
BEGIN
SET @vvc_ColumnList = @vvc_ColumnList + @vvc_ColumnName
-- get the details of the next column
FETCH NEXT FROM TableCursor INTO @vvc_ColumnName
-- add a comma if we are not at the end of the row
IF @@FETCH_STATUS=0
SET @vvc_ColumnList = @vvc_ColumnList + ','
END
CLOSE TableCursor
DEALLOCATE TableCursor
-- Now search for `foo`
SELECT *
FROM testing
WHERE 'foo' in (@vvc_ColumnList);
Phương pháp thứ hai Trong máy chủ sql, bạn có thể lấy id đối tượng của bảng, sau đó sử dụng id đối tượng đó bạn có thể tìm nạp cột. Trong trường hợp đó nó sẽ được như sau:
Bước 1: Đầu tiên get Object Id của bảng
select * from sys.tables order by name
Bước 2: Bây giờ có được cột của bảng của bạn và tìm kiếm trong đó:
select * from testing where 'foo' in (select name from sys.columns where object_id =1977058079)
Lưu ý: object_id là những gì bạn nhận được trong bước đầu tiên cho bạn bảng có liên quan
Nguồn
2015-02-25 11:59:24
Có thể. Bạn có thể thêm các cột allo bằng 'hoặc' trong câu lệnh where của bạn. 'SELECT * FROM testing nơi COLNAME = 'foo' hoặc COLNAME2 = 'foo' hoặc ....' – Jens
nó có thể hữu ích http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm – Sachin