--2008查找某数据库中的列是否存在某个值
create proc spFind_Column_In_DB
(
@type int,--类型:1为文字类型、2为数值类型
@str nvarchar(100)--需要搜索的名字
)
as
--创建临时表存放结果
create table #tbl(PK int identity primary key ,tbl sysname,col sysname)
declare @tbl nvarchar(300),@col sysname,@sql nvarchar(1000)
if @type=1
begin
declare curTable cursor fast_forward
for
select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id
where o.type_desc='user_table' and user_type_id in (167,175,231,239,35,99)
end
else
begin
declare curTable cursor fast_forward
for
select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id
where o.type_desc='user_table' and user_type_id in (56,48,52,59,60,62,106,108,122)
end
open curtable
fetch next from curtable into @tbl,@col
while @@FETCH_STATUS=0
begin
set @sql='if exists (select * from '+@tbl+' where '
if @type=1
begin
set @sql += @col + ' like ''%'+@str +'%'')'
end
else
begin
set @sql +=@col + ' in ('+@str+'))'
end set @sql += ' INSERT #TBL(tbl,col) VALUES('''+@tbl+''','''+@col+''')'
--print @sql
exec (@sql)
fetch next from curtable into @tbl,@col
end
close curtable
deallocate curtable
select * from #tbl--使用例子,查询库中存在aaa这个值的列:
exec spFind_Column_In_DB 1,'aaa'
create proc spFind_Column_In_DB
(
@type int,--类型:1为文字类型、2为数值类型
@str nvarchar(100)--需要搜索的名字
)
as
--创建临时表存放结果
create table #tbl(PK int identity primary key ,tbl sysname,col sysname)
declare @tbl nvarchar(300),@col sysname,@sql nvarchar(1000)
if @type=1
begin
declare curTable cursor fast_forward
for
select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id
where o.type_desc='user_table' and user_type_id in (167,175,231,239,35,99)
end
else
begin
declare curTable cursor fast_forward
for
select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id
where o.type_desc='user_table' and user_type_id in (56,48,52,59,60,62,106,108,122)
end
open curtable
fetch next from curtable into @tbl,@col
while @@FETCH_STATUS=0
begin
set @sql='if exists (select * from '+@tbl+' where '
if @type=1
begin
set @sql += @col + ' like ''%'+@str +'%'')'
end
else
begin
set @sql +=@col + ' in ('+@str+'))'
end set @sql += ' INSERT #TBL(tbl,col) VALUES('''+@tbl+''','''+@col+''')'
--print @sql
exec (@sql)
fetch next from curtable into @tbl,@col
end
close curtable
deallocate curtable
select * from #tbl--使用例子,查询库中存在aaa这个值的列:
exec spFind_Column_In_DB 1,'aaa'
解决方案 »
- 角色是不是SQL server 2000的数据库对象?
- 用户表的登录账户列 应该设成聚焦索引吗?
- 一个sql语句,效率问题。欢迎大神指教
- 查询问题,求解,高手帮忙。。。
- 一个数据恢复的问题
- convert(varchar,B.Pub_Position_Date,110),得到的结果是 06-14-2004 ,而我想要的是 2004-06-14,如何改语句呢?
- 英文分词搜索和相关搜索,请大家帮我,我快吐血了
- 笨人求语句
- 有谁知道怎么样利用ASP通过WEB建立和管理SQL SERVER数据库?
- sqlserver排序的问题
- 请教有经验的人士,所有SP都有必要用Try Catch 和 TRANSACTION 吗?
- 数据列转行值
消息 217,级别 16,状态 1,过程 spFind_Column_In_DB,第 41 行
超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。
刚才的报错我搞定了,但是这个不是我想要的结果呢。
我要的结果是出现那个字符串的存储过程、view、或者函数的名字
刚才的报错我搞定了,但是这个不是我想要的结果呢。
我要的结果是出现那个字符串的存储过程、view、或者函数的名字我知道,那个sp是用来查数据的,不是查定义的,你要从sys.sql_modulers这里找
刚才的报错我搞定了,但是这个不是我想要的结果呢。
我要的结果是出现那个字符串的存储过程、view、或者函数的名字我知道,那个sp是用来查数据的,不是查定义的,你要从sys.sql_modulers这里找
搞定了搞定了,多谢版主,NB啊
从sys.sql_modulers这里找到了结果
--查询视图列表
SELECT name FROM sysobjects WHERE xtype='V' AND name <> 'dtproperties'
--函数列表
SELECT name FROM sysobjects WHERE xtype='FN' AND name <> 'dtproperties'
--SP列表
select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1再结合游标,循环判断即可!