查找数据库中的GUID数值的位置

kanbor 2020-12-31 02:26:27
问题的起因是这样的,现在很多数据库的设计喜欢使用GUID,因为这个数据是全局唯一,不会产生重复。但是过多的应用却给理解和分析带来麻烦,举例说明,数据表有一个字段:MemberStatus,字段里都是引用GUID数据:
F9E42E1E-01E2-4831-B34E-D55E0A405855
3914fdef-9ecb-45ea-b44e-47c1a48ea41e
F9E42E1E-01E2-4831-B34E-D55E0A405855
3914fdef-9ecb-45ea-b44e-47c1a48ea41e
F9E42E1E-01E2-4831-B34E-D55E0A405855
这些数据对应的实际意义的数据在另一个表中描述,具体哪个表不知道,也很不容易找到,有没有一种办法,可以用GUID的值,在整个数据库中查找,然后得到结果:
找到F9E42E1E-01E2-4831-B34E-D55E0A405855数值在下列表格出现以及出现的次数。
1:表1,字段a,6次
2:表1,字段b,1次
3:表2,字段c,20次
4:表3,字段d,3次
......
那么很容易理解,出现1次的,最有可能是定义这个数据实际意义的表格!
如果你有解决问题的方案,请麻烦告知,谢谢!
...全文
460 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_41037215 2021-03-18
  • 打赏
  • 举报
回复
kanbor 2021-01-28
  • 打赏
  • 举报
回复
看到好几个人回复这个内容,说明还是有人能理解,并感受到同样的问题,你们的回复都有指导问题解决的思路,先谢谢了!再等一段时间结贴。
唐诗三百首 2021-01-28
  • 打赏
  • 举报
回复
一般查询时需要根据GUID字段join其他表的GUID字段, 应可用SQL Profiler工具跟踪一下相关界面对应的SQL语句, 然后就找到需要的表了.
Hello World, 2021-01-03
  • 打赏
  • 举报
回复
一般设计同一字段的数据有多个来源时应该会有另外一个字段记录来源单据的,像用友的收发记录主表ID、子表ID都是多表共用的,做视图时会做一个字段来说明ID是来自哪里的。 如果你的系统是别人做好的,GUID也是别人的程序自动写入的,那你可以加一个字段或者一个表、再弄个触发器来更新这个GUID记录是从哪个表过来的,以后查询就简单了
吉普赛的歌 2021-01-02
  • 打赏
  • 举报
回复
还能怎么简洁?#3 就是最合适的方法了。
kanbor 2021-01-02
  • 打赏
  • 举报
回复
使用存储过程,也是一种解决方法,谢谢! 还有没有更简洁的呢?
ダ雨夹雪リ 2020-12-31
  • 打赏
  • 举报
回复


/*
测试:
Exec sp_search 'F9E42E1E-01E2-4831-B34E-D55E0A405855'
思路:
先查询出所有表所有GUID类型的字段,然后统计字段值等于@Val的个数,如果大于0,保存结果
如果数据量大的话,有点慢
如果你的值存的可能还有其他类型,那你要system_Type_ID = 36 改一下这句,这样更慢更慢更慢
*/
 
CREATE Procedure sp_Search(@Val UNIQUEIDENTIFIER)
As
Begin
	Declare @TBName Varchar(200)
	Declare @ColName Varchar(200)
	Declare @Rst int
	Declare @Sql NVarchar(4000)
	Declare @TB Table(TbName Varchar(200),ColName Varchar(200),Cnt INT)
	
	Declare myCur Cursor For
		Select A.Name,B.Name From sys.objects A Inner join sys.columns B on a.object_id=b.object_id
			Where A.Type='U' And system_Type_ID = 36 

	Open myCur;

	Fetch Next From myCur Into @TBName,@ColName
	While @@FETCH_STATUS = 0
	BEGIN
		SET @Rst = 0
		Set @Sql='Select @Rst = count(1) From ['+@TBName+'] Where ['+@ColName+'] = @Val)'
		Exec sp_Executesql @sql,N'@Val UNIQUEIDENTIFIER,@Rst int output',@Val,@Rst output
		If(@Rst>=1)
			Insert Into	@TB values(@TBName,@ColName,@Rst)  
		Fetch Next From myCur Into @TBName,@ColName
	End
	Close myCur
	DeAllocate myCur
	
	Select * From @TB
End


kanbor 2020-12-31
  • 打赏
  • 举报
回复
,分析同行数据库,无法联系开发者。
唐诗三百首 2020-12-31
  • 打赏
  • 举报
回复
"具体哪个表不知道,也很不容易找到" --> 建议联系系统开发者咨询或请其提供数据字典.

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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