求就SQL语句或方法

lin421204266 2010-10-10 02:28:09
我只知道数据库的一个值,怎么才能知道这个值所在的表呢(多个表都有这表值)??

...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-10-10
  • 打赏
  • 举报
回复
获取数据库中所有表及自字段,全文检索
SELECT b.name '表名',a.colorder '序号',a.name '字段名',c.name '类型',a.length '长度',a.isnullable '空值',
a.cdefault '默认值' FROM syscolumns a,sysobjects b,systypes c WHERE a.id=b.id and b.xtype='u' and a.xtype=c.xtype order by b.name,a.colorder
取表名
SELECT distinct(b.name) '表名' FROM syscolumns a,sysobjects b,systypes c WHERE a.id=b.id and b.xtype='u' and a.xtype=c.xtype order by b.name
http://topic.csdn.net/u/20091226/11/cf8088b7-d728-4d67-a984-d4ef050f3d35.html
大龙猫X 2010-10-10
  • 打赏
  • 举报
回复
只知道SQLServer2000数据库中有一值,怎么查找到这个值所在的表和字段!





比如说:





我要找一个值:aa 





那么怎么查找到值:aa所在的表和字段!
--------------------------------------------------------------------------------
答:sqlserver中有几个系统表,从里面可以取得所有的用户表名和列名,好像一个叫sysobjects,


不太记得了,然后动态组织你的sql语句遍历查找所有的表所有的字段?


不过你这个是必须要实现的功能么?费这么大劲值得么?
--------------------------------------------------------------------------------
答:能说具体点吗?
--------------------------------------------------------------------------------
答:----转老大写的存储过程


CREATEPROCsp_ValueSearch


@valuesql_variant,--要搜索的数据


@precisionbit=1--1=仅根据sql_variant中的数据类型查找对应类型的数据列.<>1,查询兼容的所有列,字符数据使用like匹配


AS


SETNOCOUNTON


IF@valueISNULLRETURN





--数据类型处理


SELECTxtypeINTO#tFROMsystypes


WHEREname=SQL_VARIANT_PROPERTY(@value,N'BaseType')





--扩展数据类型及查询处理语句


DECLARE@sqlnvarchar(4000),@sql1nvarchar(4000)


IF@precision=1


SET@sql=CASESQL_VARIANT_PROPERTY(@value,N'BaseType')


WHENN'text'THENN'LIKEN''''CAST(@valueasvarchar(8000))'''''


WHENN'ntext'THENN'LIKE''''CAST(@valueasnvarchar(4000))'''''


ELSEN'=@value'END


ELSE


BEGIN


SET@sql=CAST(SQL_VARIANT_PROPERTY(@value,N'BaseType')assysname)


IF@sqlLIKEN'char'or@sqlLIKEN'text'


BEGIN


INSERT#tSELECTxtypeFROMsystypes


WHEREnameLIKEN'char'ornameLIKEN'text'


SELECT@sql=N'LIKEN''''CAST(@valueas'


CASE


WHENLEFT(@sql,1)=N'n'THEN'nvarchar(4000)'


ELSE'varchar(8000)'END


N')N'''''


END


ELSEIF@sqlLIKEN'趖etime'


BEGIN


INSERT#tSELECTxtypeFROMsystypes


WHEREnameLIKEN'趖etime'


SET@sql=N'=@value'


END


ELSEIF@sqlLIKEN'int'


OR@sqlLIKEN'money'


OR@sqlIN(N'real',N'float',N'decimal',N'numeric')


BEGIN


INSERT#tSELECTxtypeFROMsystypes


WHEREnameLIKEN'int'


ORnameLIKEN'money'


ORnameIN(N'real',N'float',N'decimal')


SET@sql=N'=@value'


END


ELSE


SET@sql=N'=@value'


END


--保存结果的临时表


CREATETABLE#(TableNamesysname,FieldNamesysname,Typesysname,SQLnvarchar(4000))





DECLAREtbCURSORLOCAL


FOR


SELECTN'SELECT*FROM'


QUOTENAME(USER_NAME(o.uid))


N'.'QUOTENAME(o.name)


N'WHERE'QUOTENAME(c.name)


@sql,


N'INSERT#VALUES(N'QUOTENAME(o.name,N'''')


N',N'QUOTENAME(c.name,N'''')


N',N'QUOTENAME(QUOTENAME(t.name)CASE


WHENt.nameIN(N'decimal',N'numeric')


THENN'('CAST(c.precasvarchar)N','CAST(c.scaleasvarchar)N')'


WHENt.name=N'float'


ORt.namelikeN'char'


ORt.namelikeN'binary'


THENN'('CAST(c.precasvarchar)N')'


ELSEN''END,N'''')


N',@sql)'


FROMsysobjectso,syscolumnsc,systypest,#ttt


WHEREo.id=c.id


ANDc.xusertype=t.xusertype


ANDt.xtype=tt.xtype


ANDOBJECTPROPERTY(o.id,N'IsUserTable')=1





OPENtb


FETCHtbINTO@sql,@sql1


WHILE@@FETCH_STATUS=0


BEGIN


SET@sql1=N'IFEXISTS('@sqlN')'@sql1


EXECsp_executesql@sql1,N'@valuesql_variant,@sqlnvarchar(4000)',@value,@sql


FETCHtbINTO@sql,@sql1


END


CLOSEtb


DEALLOCATEtb


SELECT*FROM#

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧