use*_*601 7 sql-server stored-procedures t-sql
我没有得到这个简单PRINT语句的任何输出。我错过了什么?
DECLARE @team varchar(20)
BEGIN
SELECT @team = TEAM
FROM DISTRIB_LINE
PRINT 'value is' + @team
END
Run Code Online (Sandbox Code Playgroud)
And*_*y M 11
如果表达式的计算结果为空,则 PRINT 语句将不打印任何内容。显然@team,作为前面语句的结果最终为 null,导致 PRINT 不输出任何内容。如果您想在变量为空时打印某些内容,请使用 ISNULL 或 COALESCE:
PRINT 'value is ' + ISNULL(@team, '(null)');
Run Code Online (Sandbox Code Playgroud)
您还可以向 SELECT 添加过滤器以确保跳过 NULL(如果您希望跳过它们,那就是):
SELECT @team = TEAM
FROM DISTRIB_LINE
WHERE TEAM IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
但是,如果表中没有行或所有TEAM值都为空,则此语句将不进行任何赋值。在这种情况下,如果 PRINT 仍然不输出任何内容,则意味着@team即使在 SELECT 之前也是空的。因此,您可能仍需要应用以前的方法。
此外,当表有很多行时,以这种方式分配变量不是一个好主意,因为您无法控制最终分配哪个值。所以。Alexei在使用 TOP 以及将其与 ORDER BY 以及可能的其他过滤器相结合方面也有自己的观点。
PRINT输出消息,而不是结果集。尝试类似以下内容:
DECLARE @team varchar(20)
SELECT TOP 1 @team = TEAM
FROM DISTRIB_LINE
SELECT @team AS Team
Run Code Online (Sandbox Code Playgroud)
我的示例包含TOP因为我已确保@team接收单个值。但是,它的值将不明确(非确定性)。最确定的是使用ORDER BY子句和 aWHERE强制执行单个记录)。
| 归档时间: |
|
| 查看次数: |
28474 次 |
| 最近记录: |