มีวิธีที่ฉันสามารถใช้สตูดิโอการจัดการ SQL Server เพื่อค้นหาคอลัมน์ทั้งหมดที่มีชื่อคอลัมน์ที่มีสตริงย่อยที่แน่นอนหรือไม่


11

ฉันใช้สตูดิโอจัดการเซิร์ฟเวอร์ SQL 2008

ฉันมีฐานข้อมูลขนาดใหญ่ที่มีคอลัมน์นับพัน มันจะดีถ้าฉันสามารถค้นหาคอลัมน์ทั้งหมดที่มีชื่อมีสตริงย่อยที่แน่นอน

ไม่มีใครรู้วิธีการทำเช่นนี้?

ขอบคุณ!


1
ฉันทำสิ่งนี้ด้วยสคริปต์แบตช์ไฟล์ของตัวเองโดยใช้โครงการ Java ชื่อ schemacrawler เพื่อทำงาน
djangofan

คำตอบ:


16

Mmhh คุณสามารถลอง:

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

อ่าไม่มีหน้าจอ GUI ที่ดีสำหรับสิ่งนี้
IsaacB

ตกลงคุณต้องการอะไร :)
Stef

ดูเหมือนว่า sys.columns จะไม่มีอยู่สำหรับฉันฉันกำลังมองหามัน
IsaacB

หากคุณไม่สามารถ "เห็น" สิ่งเหล่านี้ได้เนื่องจากคุณไม่มีสิทธิ์ที่ถูกต้อง คุณสามารถให้สิทธิ์
Stef

ฉันถูกสืบค้นฐานข้อมูล sql server 2000 เก่าโดยบังเอิญจากสตูดิโอปี 2008 สคริปต์ของคุณใช้งานได้จริงขอบคุณมาก
IsaacB

2

คุณสามารถใช้เครื่องมือของบุคคลที่สามเช่นการค้นหา SQLของ Red-Gate ที่ให้บริการฟรี


ฉันมีบางอย่างจากประตูสีแดงติดตั้งบางทีฉันจะตรวจสอบและดูว่าฉันมีการค้นหา sql ขอบคุณ!
IsaacB

2

คุณสามารถใช้มุมมอง Information_SCHEMA

USE <database>

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

หนึ่ง catch คือเพื่อให้แน่ใจว่าใช้ฐานข้อมูลที่ถูกต้อง


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.