我正在使用 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,代码仍会读取第三个参数(即使不会使用它)。
我已经多次遇到过这种情况,我相信这是有充分理由的 - 但我该如何避免呢?
我确定这与周围的怪癖有关isnumeric。在英语中,我有一个过滤isnumeric(somefield) = 1. 然后我尝试int在我的where子句中使用 an 来查询它,因为表中的其他一些字段有字符值,所以整个事情都失败了。
我创建了一个显示错误的SQL 小提琴。
我尝试cast/convert在视图的 select 中执行 a ,但查询引擎似乎忽略了它。
那么 - 为什么会发生这种情况,有没有一种干净的方法来处理它?
由于我在插入物上缺少引号,原始小提琴有一个非常相似的错误。这不是我试图强调的问题。我通过为所有插入的值添加引号来修复视图。
我有一个查询将数据从一个表插入到另一个表中。源列之一大于目标表的列,但查询中选择的实际数据并非如此。因此,例如,源表是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 在哪一点验证插入的数据。在哪一点抛出错误?