我希望这不是重复。我检查了搜索,似乎找不到明确的答案。
我有一个表,它的主键设置为UniqueIdentifier
. 我还有另一个表,其中有一varchar
列基本上包含一个带有查询字符串的 url,该查询字符串包含我的第一个表中的 guid。
所以我的两张桌子就像:
状态表
StateID StateName
EB06F84C-15B9-4397-98AD-4A63DA2A238E Active
网址表
URL
page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E
我要做的是连接在一起URLTable
,并且StateTable
ON 的值StateID
包含在 URL 表的 URL 中。我还没有真正弄清楚加入。我什至尝试只选择一张表并尝试按StateTable
. 我试过做这样的事情:
SELECT *
FROM URLTable
WHERE EXISTS
(SELECT *
FROM StateTable
WHERE URL LIKE '%' + StateID + '%')
即使这样也不起作用,因为它说我正在比较uniqueidentifier
and varchar
。
有什么方法可以使用 like 命令连接 2 个表,并且 like 命令不比较 2 个不兼容的变量?
谢谢!!
更新:让我添加一些我应该提到的其他内容。该查询用于构建分析报告。这些表是 CMS 分析包的一部分......因此更新或更改表结构不是一种选择。
其次,这些表会看到非常高的流量,因为它们正在捕获站点分析......所以性能是一个非常重要的问题。第三件事是,在我的示例中,我说 id= 但可能有多个值,例如id=guid&user=guid&date=date
.
更新 2:我刚刚意识到的另一件事让我感到恐惧的是,有时查询字符串会从 GUID 中删除破折号.. 有时没有.. 所以除非我弄错了,否则我不能将子字符串转换为Uniqueidentifier
. 任何人都可以确认?叹息。我确实让它工作了
REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))
但现在我非常担心这方面的性能问题,因为 URL 的表非常大。不过,这可能是野兽的本性,除非我能做些什么。