sql - 如何使用 CASE 语句设置局部变量

标签 sql sql-server sql-server-2008

首先让我说“我确定有更简单的方法可以做到这一点,但我找不到它......”

我正在尝试根据记录中的 4 个独立值构建跟踪编号,以便我可以连接变量并将连接后的字符串插入到另一个表中。

DECLARE @fy char = '';
SET @fy = (SELECT proposalCallID,
                CASE
                    WHEN proposalCallID IN (7, 8) THEN '19'
                    WHEN proposalCallID IN (5, 6) THEN '18'
                END
            FROM proposalPackage WHERE proposalCallID = 15)

我得到一个错误“当子查询没有用 EXISTS 引入时,只能在选择列表中指定一个表达式。”

跟踪号有 4 个部分,所以我有 4 个查询需要连接这些部分以构成完整的跟踪号。

感谢任何帮助。

最佳答案

这就是你想要做的吗?

DECLARE @fy char(2) = '';

SELECT @fy = (CASE WHEN proposalCallID IN (7, 8) THEN '19'
                   WHEN proposalCallID IN (5, 6) THEN '18'
              END)
FROM proposalPackage
WHERE proposalCallID = 15;

请注意 @fy 的长度规范,因此该值适合。 始终在 SQL Server 中对字符类型使用长度规范。

根据逻辑,您可以完全不设置值。 CASE 表达式返回的值为NULL,因此:

DECLARE @fy char(2);

效果完全一样。

关于sql - 如何使用 CASE 语句设置局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51156867/

相关文章:

mysql - 使用 LIKE 条件连接两个 mysql 表。

php - 有没有办法更改我的主机名来修复 "php_network_getaddresses: getaddrinfo failed: No such host is known."?

sql - varchar(-1) 是什么意思?

c# - 从应用程序 (C#) 将数据类型 nvarchar 转换为 int 时出错,但在单独运行 SP 时却没有

mysql - 如何使用子选择优化删除查询?

SQL多对多选择

sql-server - sql-server 中的分段代码

sql-server - 高效使用SQL事务

c# - MySql数据库中如何调用多个存储过程

sql - Count(*) 返回 null