相关疑难解决方法(0)

即使第一个参数不为 NULL,SQL Server 是否会读取所有 COALESCE 函数?

我正在使用 T-SQLCOALESCE函数,其中第一个参数在大约 95% 的运行时间不会为空。如果第一个参数是NULL,第二个参数是一个相当漫长的过程:

SELECT COALESCE(c.FirstName
                ,(SELECT TOP 1 b.FirstName
                  FROM TableA a 
                  JOIN TableB b ON .....)
                )
Run Code Online (Sandbox Code Playgroud)

例如,如果 ,c.FirstName = 'John'SQL Server 仍会运行子查询吗?

我知道使用 VB.NETIIF()函数,如果第二个参数为 True,代码仍会读取第三个参数(即使不会使用它)。

null sql-server coalesce

102
推荐指数
6
解决办法
2万
查看次数

为什么 SQL 尝试转换被我的 where 子句排除的行?

我已经多次遇到过这种情况,我相信这是有充分理由的 - 但我该如何避免呢?

我确定这与周围的怪癖有关isnumeric。在英语中,我有一个过滤isnumeric(somefield) = 1. 然后我尝试int在我的where子句中使用 an 来查询它,因为表中的其他一些字段有字符值,所以整个事情都失败了。

我创建了一个显示错误的SQL 小提琴

我尝试cast/convert在视图的 select 中执行 a ,但查询引擎似乎忽略了它。

那么 - 为什么会发生这种情况,有没有一种干净的方法来处理它?

由于我在插入物上缺少引号,原始小提琴有一个非常相似的错误。这不是我试图强调的问题。我通过为所有插入的值添加引号来修复视图。

sql-server view type-conversion

8
推荐指数
2
解决办法
2537
查看次数

此时 SQL Server 会验证数据以进行插入

我有一个查询将数据从一个表插入到另一个表中。源列之一大于目标表的列,但查询中选择的实际数据并非如此。因此,例如,源表是varchar(25),目标表是varchar(10),并且查询为该特定列选择不超过 10 个字符的记录。

我的初始查询因截断错误而失败,但是当我重新编写它时,它选择了相同的记录但更改了 where 子句,即WHERE IN在 cte 上使用和过滤它成功运行。

即而不是做

select * from tbl where col1 = 1
Run Code Online (Sandbox Code Playgroud)

我做了:

with cte as (select 1) select * from tbl where col1 in (select 1 from cte)
Run Code Online (Sandbox Code Playgroud)

我知道这是 SQL Server 中的一个错误,但我仍然想知道 SQL Server 在哪一点验证插入的数据。在哪一点抛出错误?

sql-server insert

4
推荐指数
1
解决办法
247
查看次数

标签 统计

sql-server ×3

coalesce ×1

insert ×1

null ×1

type-conversion ×1

view ×1