gpt4 book ai didi

从 varchar 到 uniqueidentifier 的 SQL 转换在 View 中失败

转载 作者:行者123 更新时间:2023-12-03 02:10:41 25 4
gpt4 key购买 nike

我陷入了以下场景。我有一个数据库,其中有一个包含客户数据的表,还有一个表,我在其中放置用于监控 B2B 网站上发生的情况的记录。

客户表如下:

  • ID,整数,不为空
  • GUID、uniqueidentfier、不为空、主键
  • 其他东西...

监控表:

  • ID,整数,不为空
  • USERGUID,唯一标识符,空
  • 参数2,varchar(50),空
  • 其他东西...

在 PARAMETER1 中存储了客户指南以及其他存储的数据类型。

现在的问题是根据客户的上次访问日期对他们进行排序,最近访问的客户必须位于网格的顶部。

我正在使用 Entity Framework ,并且在比较字符串和 guid 类型时遇到问题,因此我决定在监控表顶部创建一个 View :

SELECT        
ID,
CONVERT(uniqueidentifier, parameter2) AS customerguid,
USERguid,
CreationDate
FROM
MONITORING
WHERE
(dbo.isuniqueidentifier(parameter2) = 1)
AND
(parameter1 LIKE 'Customers_%' OR parameter1 LIKE 'Customer_%')

我在 EF 中导入了 View 并进行了 Linq 查询。它什么也没返回,所以我提取了生成的 SQL 查询。在 SQL Management Studio 中测试查询时,出现以下错误:从字符串转换为 uniqueidentifier 时转换失败。

问题出在以下代码片段(针对这个问题进行了简化,但也给出了错误:

SELECT *,
(
SELECT
[v_LastViewDateCustomer].[customerguid] AS [customerguid]
FROM [dbo].[v_LastViewDateCustomer] AS [v_LastViewDateCustomer]
WHERE c.GUID = [v_LastViewDateCustomer].[customerguid]
)

FROM CM_CUSTOMER c

但是当我进行连接时,我得到了结果:

SELECT *
FROM CM_CUSTOMER c
LEFT JOIN
[v_LastViewDateCustomer] v
on c.GUID = v.customerguid

我试图制作一个 SQL fiddle ,但它在该网站上运行。 http://sqlfiddle.com/#!3/66d68/3

谁能给我指出正确的方向?

最佳答案

使用

TRY_CONVERT(UNIQUEIDENTIFIER, parameter2) AS customerguid

而不是

 CONVERT(UNIQUEIDENTIFIER, parameter2) AS customerguid

View 内联到查询中,CONVERT 可以在 WHERE 之前运行。

有关一些其他讨论,请参阅 SQL Server should not raise illogical errors

关于从 varchar 到 uniqueidentifier 的 SQL 转换在 View 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com