日期:2014-05-17  浏览次数:20649 次

抓取函数或者存储过程中设计的对象名及相关字段
根据业务需求,本人需要从函数或者存储过程中抓取涉及到的表名和对应的字段名。
比如:

CREATE FUNCTION [dbo].[F112B员工交通补贴](@员工工号 int)
returns INT
as
begin
DECLARE @员工交通补贴 INT
set @员工交通补贴=(SELECT   单程交通补贴
FROM         dbo.T112C员工工作安排
WHERE     (登记确认时间 IN
                          ((SELECT     MAX(登记确认时间) AS 最新安排日期
                              FROM         dbo.T112C员工工作安排 AS T112C员工工作安排_1
                              WHERE     (审核确认状态 = 1) AND (终止确认状态 = 0)
                              GROUP BY 员工登记姓名代码))) AND (终止确认状态 = 0) AND (审核确认状态 = 1)AND 
                       (dbo.T112C员工工作安排.员工登记姓名代码 = ''+@员工工号+''))
                      return @员工交通补贴
end
我要获得的是: dbo.T112C员工工作安排.单程交通补贴
   dbo.T112C员工工作安排.登记确认时间
 dbo.T112C员工工作安排.审核确认状态
 dbo.T112C员工工作安排.终止确认状态
dbo.T112C员工工作安排. 员工登记姓名代码
dbo.T112C员工工作安排. 终止确认状态
dbo.T112C员工工作安排. 审核确认状态

这只是个列子,不知大家是否理解我的意思? 并请问各位如何实现?
------解决方案--------------------
create table tb(txt nvarchar(500))
go
insert into tb
exec sp_helptext 'getmsgboard'
go
select distinct b.name as tbname,c.name as columnname from tb a left join sys.objects b on a.txt like '%'+b.name+'%'
left join sys.columns c on a.txt like '%'+c.name+'%' where b.name is not null or c.name is not null
/*
tbname                  columnname
--------------- ------------------------------------------
NULL                    id
NULL                    name
getmsgboard             msg
msgBoard                bname
msgBoard                ename
msgBoard                id
msgBoard                msg
msgBoard                msgdate
msgBoard