Có cách nào tôi có thể sử dụng phòng quản lý SQL Server để tìm tất cả các cột có tên cột có chứa một chuỗi con nhất định không?


11

Tôi đang sử dụng phòng quản lý máy chủ SQL 2008.

Tôi có một cơ sở dữ liệu di sản khổng lồ với hàng ngàn cột. Sẽ thật tuyệt nếu tôi có thể tìm kiếm tất cả các cột có tên chứa một chuỗi con nhất định.

Có ai biết cách để làm điều này không?

Cảm ơn!


1
Tôi thực hiện loại điều này với tập lệnh tệp bó của riêng tôi, sử dụng một dự án Java có tên schemacrawler để thực hiện công việc.
djangofan

Câu trả lời:


16

Mmhh bạn có thể thử:

use <your_database>
select o.name,c.name 
from sys.columns c inner join sys.objects  o on c.object_id=o.object_id 
and o.type = 'U'
and CHARINDEX('<your_sub_string>', c.name)>=1

ah, vì vậy không có màn hình gui đẹp cho việc này.
IsaacB

Ok, bạn muốn chính xác những gì :)?
Stef

sys.columns dường như không tồn tại đối với tôi, tôi đang xem xét nó
IsaacB

Nếu bạn không thể "nhìn thấy" chúng thì đó là vì bạn không có quyền. Bạn có thể CẤP?
Stef

tôi đã truy vấn một cơ sở dữ liệu máy chủ sql 2000 cũ một cách tình cờ từ studio 2008. Kịch bản của bạn hoạt động thực sự, cảm ơn rất nhiều.
IsaacB

2

Bạn có thể sử dụng một số công cụ của bên thứ 3 như Tìm kiếm SQL của Red-Gate miễn phí.


Tôi có một cái gì đó từ cổng đỏ được cài đặt, có thể tôi sẽ kiểm tra và xem nếu tôi có tìm kiếm sql. Cảm ơn!
IsaacB

2

Bạn có thể sử dụng các khung nhìn Information_SCHema.

USE <database>

SELECT COLUMN_NAME
     , TABLE_NAME     
 FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%<string you are looking for>%'

Một lưu ý là đảm bảo SỬ DỤNG cơ sở dữ liệu chính xác.


0
USE <database>;

Declare @Col varchar(10);
Declare @Val varchar(10);
Declare @tablename varchar(20);
Declare @sql nvarchar(200);
Declare @sql1 nvarchar(200);

SET @Col = '...';   --INSERT COLUMN NAME
SET @Val = ...; -- INSERT COLUMN VALUE

IF OBJECT_ID('tempdb.dbo.##TempTable1', 'U') IS NOT NULL
DROP TABLE ##TempTable1;

SELECT NULL AS MYKEY, name
into ##TempTable1
FROM sysobjects
WHERE id IN ( SELECT id FROM syscolumns WHERE name = @Col )
ORDER BY name asc

set rowcount 1

update ##TempTable1 set mykey = 1

while @@rowcount > 0
begin
    set rowcount 0

    set @tablename =  (select name from ##TempTable1 where mykey = 1)
    set @sql = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+';'
    set @sql1 = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') select name from ##TempTable1 where mykey = 1'
    EXEC sp_executesql @sql1
    EXEC sp_executesql @sql

    delete ##TempTable1 where mykey = 1
        set rowcount 1
    update ##TempTable1 set mykey = 1
end
set rowcount 0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.