我有一个表,它的主键设置为一个UniqueIdentifier.我还有另一个表有一个varchar列,它基本上包含一个包含查询字符串的url,该查询字符串包含我第一个表中的guids.
所以我的2张表就像:
StateTable
StateID StateName EB06F84C-15B9-4397-98AD-4A63DA2A238E Active
URLTable
URL page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E
我想要做的是将URLTable和StateTable连接在一起,StateID的值包含在URL表的URL中.我没有真正想出加入.我甚至尝试只选择一个表,并试图通过StateTable中的值进行过滤.我试过这样做:
SELECT * FROM URLTable WHERE EXISTS (SELECT * FROM StateTable WHERE URL LIKE '%' + StateID + '%')
即使这不工作,因为它说我正在比较uniqueidentifier和varchar.
有没有办法使用类似的命令连接2个表,哪个类似的命令不比较2个不兼容的变量?
谢谢!!
更新:让我添加一些额外的事情,我应该提到.该查询是为了构建分析报告的目的.这些表是CMS分析软件包的一部分…因此更新或更改表结构不是一个选项.
其次,这些表看到了非常高的流量,因为他们正在捕获网站分析…所以表现是一个很大的问题.第三件事是在我的例子中,我说id =但可能有多个值,如id = guid& user = guid& date = date.
更新2:我只是意识到我的恐怖的另一件事是,有时查询字符串从GUID ..删除的破折号..有时不是..所以除非我“错误,我不能将子串转换为唯一标识符.有人确认了,叹了一口气,我确实让它工作了
REPLACE('-','',CONVERT(varchar(50),a.AutomationStateId))
但是现在我非常担心性能问题,因为URL的表格非常大.这可能是野兽的本质,除非有什么可以做的.
解决方法
WHERE URL LIKE '%' + CONVERT(varchar(50),StateID) + '%'
要么
WHERE URL LIKE N'%' + CONVERT(nvarchar(50),StateID) + N'%'
如果网址是nvarchar(…)
编辑
正如在另一个答案中指出的,这可能会导致大型桌面的性能不佳.LIKE与CONVERT组合将导致表扫描.这可能不是小表的问题,但如果性能成问题,您应该考虑将URL分为两列.一列会包含“page.aspx?id =”,另一列包含UNIQUEIDENTIFIER.您的查询可以更容易地进行优化.