微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在T-SQL SELECT中定义一个循环中的变量(像LINQ中的LET)吗?

我可以用LINQ写这样的东西:
var selection = from person in personList
                let initials = person.FirstName[0] + person.LastName[0]
                select initials;

我可以做类似于sql的事情,例如:

SELECT @Initials
FROM [Person]
SET @Initials = SUBSTRING (Person.FirstName,1,1) + SUBSTRING (Person.LastName,1)

可能不是,但也许有一个技巧?

我需要一个预先计算的变量,以便在复杂的WHERE子句中进一步使用,以避免极端的复杂性和代码重复.

解决方法

一个干净的方法,而不添加一个临时表,循环等,将使用通用表表达式(CTE).例:
;WITH PersonsWithInitials AS
(
    SELECT
        SUBSTRING (COALESCE(Person.FirstName,''),1)
        + SUBSTRING (COALESCE(Person.LastName,1) AS Initials,FirstName,LastName,City
    FROM
        [Person]
)
SELECT
    FirstName,City,Initials
FROM
    PersonsWithInitials
WHERE
    /* Complex WHERE clause goes here and it can reference Initials as if it were a field */

代替上面的“空”,你可以使用一段时间或其他东西来代替空名字段.

所有这些都应该在.NET的单个sql调用中执行 – CTE不像视图,存储过程,临时表等保存在数据库中.

原文地址:https://www.jb51.cc/mssql/75111.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐