有没有办法获取在函数/存储过程中创建的表的字段名称?

时间:2009-12-20 09:43:01

标签: sql-server tsql

当我需要现有表的列时,我使用查询:

SELECT c.[name]
FROM
    (SELECT * from syscolumns) c
        INNER JOIN
    (SELECT [id] from sysobjects where name= 'tableName') o on c.[id]=o.[id]

我需要在runTime期间创建的表的字段:

select    
    a.ID,
    b.lName,
    b.fName
into #T
from 
    a
        inner join
    b on a.id=b.id

select * from #T_columns

将生成一个包含3行的表: ID L-NAME FNAME

我该怎么做?

由于

2 个答案:

答案 0 :(得分:0)

创建临时表时,它将位于tempdb中。你可以这样查看:

SELECT COLUMN_NAME
FROM tempdb.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME LIKE '#T|_%' ESCAPE '|'

如果在tempdb中执行SELECT * FROM INFORMATION_SCHEMA.TABLES,您将看到您使用的临时表名称(#T)实际上附加了许多下划线,后跟唯一标识符。所以你不会发现它只是搜索table_name ='#T'。

这就是为什么你必须像我上面所示使用LIKE的原因。这将匹配“#T_”,后跟任何其他其他字符。

答案 1 :(得分:0)

试试这个

SELECT sc.NAME
FROM 
tempdb..SYSOBJECTS so JOIN
tempdb..SYSCOLUMNS sc ON sc.id = so.id 
WHERE so.NAME LIKE '#T%'