2011-10-07 212 views
1

我試圖讓該表信息給一個表名,所以我寫了這樣的查詢:獲取表信息

SELECT so.name, sc.name, st.name, sc.length, CASE WHEN sc.status = 0x80 THEN 'Y' ELSE 'N' END AS IsIdent, ColOrder 
    FROM Asdim.dbo.sysobjects so 
    INNER JOIN Asdim.dbo.syscolumns sc 
    ON so.id= sc.id 
    INNER JOIN Asdim.dbo.systypes st 
    ON sc.xtype = st.xusertype 
    WHERE so.Name = 'Admin' 

的問題是,我有名字「管理員」兩個表,但他們有不同的模式。所以當我運行這個查詢時:

SELECT * FROM Asdim.dbo.sysobjects WHERE name LIKE 'Admin' 

我得到兩個記錄,因爲表名是相同的。有沒有一種方法可以根據模式名稱過濾掉?

+0

看看http://stackoverflow.com/questions/917431/sql-server-return-schema-for-sysobjects。 – a1ex07

回答

1

您正在使用的視圖都已被棄用,只是爲了向後兼容而提供。使用新的視圖給出。

SELECT t.name, 
     c.name, 
     ty.name, 
     c.is_identity, 
     c.max_length, 
     c.column_id 
FROM sys.tables t 
JOIN sys.schemas s ON s.schema_id=t.schema_id 
JOIN sys.columns c ON c.object_id = t.object_id 
JOIN sys.types ty ON ty.user_type_id = c.user_type_id 
WHERE t.name LIKE '%Admin%' AND s.name = 'dbo' 

INFORMATION_SCHEMA.COLUMNS擁有幾乎所有你需要的信息,但缺少有關標識列的信息。

+0

太棒了謝謝你。正在尋找這個很長一段時間 – peter