create table dbo.Parent (
Id bigint NOT NULL,
TypeId int NOT NULL
)
create table dbo.Child (
Id bigint NOT NULL,
ParentId bigint NOT NULL,
TypeId int NOT NULL,
varcharColumn varchar(300) NULL
)
select cast(c.varcharColumn as int)
from dbo.Parent p (nolock)
inner join dbo.Child c (nolock)
on p.Id = c.ParentId
and c.TypeId = 2
where p.TypeId = 13
Run Code Online (Sandbox Code Playgroud)
由于无法转换为int的值,我们得到一个转换中断.在这种情况下:"123-1".奇怪的是,正在转换的值会从最终结果集中过滤掉.
select c.varcharColumn
from dbo.Parent p (nolock)
inner join dbo.Child c (nolock)
on p.Id = c.ParentId
and c.TypeId …Run Code Online (Sandbox Code Playgroud) 我正在修改客户端的现有查询,我遇到了一个令人困惑的问题.
我们的客户端使用SQL Server 2008 R2,并且相关数据库使用户能够通过使用EAV结构为其中一个表指定自定义字段.存储在此结构中的所有值都是varchar(255),并且几个字段用于存储日期.正在修改有问题的查询以使用其中两个字段并将它们(一个是开始,另一个是结束)与当前日期进行比较,以确定哪一行是"当前".
我遇到的问题是查询的一部分是CONVERT(DateTime, eav.Value)为了varchar变成一个DateTime.转换本身都已成功,我可以将值作为SELECT子句的一部分包含在内,但问题的一部分是给我一个转换错误:
Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)
真正的踢球者是这样的:如果我将此查询的基础(获取具有两个自定义字段值的实体列表展平为单行)定义为视图并选择视图并过滤视图getdate(),则它可以正常工作,但是如果我使用视图中的一个(非日期)字段向第二个表添加连接,则会失败.我意识到这可能有点难以理解,所以如果需要我可以发布一个示例查询,但这个问题已经有点长了.
我已经尝试在另一个数据库中重新创建基本结构并包含示例数据,但新数据库的行为与预期一致,所以我在这里不知所措.
编辑如果它有用,这里是视图的声明:
create view Festival as
select
e.EntityId as FestivalId,
e.LookupAs as FestivalName,
convert(Date, nvs.Value) as ActivityStart,
convert(Date, nve.Value) as ActivityEnd
from tblEntity e
left join CustomControl ccs on ccs.ShortName = 'Activity Start Date'
left join CustomControl cce on cce.ShortName = 'Activity End Date'
left join tblEntityNameValue nvs on …Run Code Online (Sandbox Code Playgroud)