根据传进来的数据库name查询该数据库的表、视图、函数、存储过程
create procedure st2(@name varchar(100))
AS
BEGIN
DECLARE @SQL varchar(1000)
set @SQL='SELECT '''+@name+'''dbname,name ,type from '+@name+'..sysobjects where type in (''P'',''FN'',''U'',''V'')'
exec(@SQL)
END
执行语句: exec st2 master
存储过程没报错,执行时中间出现的报错问题
在 sys.servers 中找不到服务器 'master'。请验证指定的服务器名称是否正确。如果需要,请执行存储过程 sp_addlinkedserver 以将服务器添加到 sys.servers。
是由于@name单引号不对
create procedure st4
AS
begin
create table #t(dbname varchar(1000),name varchar(1000),type varchar(1000))
declare @name varchar(1000)
declare rs cursor local scroll for select name from sysdatabases
open rs
fetch next from rs into @name
while @@FETCH_STATUS=0
BEGIN
insert INTO #t exec st2 @name
fetch next from rs into @name
END
Close rs
select * from #t
end
执行方法:exec st4
中间出现的问题:将截断字符串或二进制数据
解决方法:把临时表定义的字段改大点