SQL Server 变量

标签 sql sql-server-2008

为什么这些查询返回不同的值?第一个按预期返回结果集,但第二个(据我所知完全相同)没有。有什么想法吗?

1:

declare @c varchar(200)

set @c = 'columnName'

select top 1 * 
from myTable 
where @c is not null 
      and len(convert(varchar, @c)) > 0

2:
SELECT top 1 * 
FROM myTable 
WHERE columnName IS NOT NULL 
      and len(convert(varchar,columnName)) > 0   

最佳答案

这是因为它们不是同一个查询——你的变量文本没有被内联到查询中。

在查询 1 中,您正在验证 @c不为空(真,你设置了它)并且它的长度大于 0(真,它是 10)。由于两者都为真,查询 1 变为:

select top 1 * from myTable

(它将根据适当的索引返回 myTable 中的第一行。)

编辑:解决对问题的评论。
declare @myTable table
(
    columnName varchar(50)
)

insert into @myTable values ('8')

declare @c nvarchar(50)
set @c = 'columnName'

select top 1 * 
from @myTable 
where @c is not null 
      and len(convert(varchar, @c)) > 0

select top 1 * 
from @myTable 
where columnName is not null
      and len(convert(varchar,columnName)) > 0

现在,当我运行这两个查询返回相同的结果。您必须告诉我我在哪里歪曲了您的实际数据/查询以获得更多帮助(或者只是扩展以找到解决方案)。

关于SQL Server 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337339/

相关文章:

sql - 如何从 SQL 转置结果集

sql-server-2008 - 按日期分组的 SQL 运行总计

sql - 使用适用于 Windows Phone 的 odata 客户端库插入 Unicode 字符串

mysql - 如何对多个记录使用 ON DUPLICATE KEY 为每个记录(如果不存在)创建一个新记录

mysql - mySQL 中的外部引用时出错(错误 3780)

mysql - 获取会计年度的总和并相应地对 SQL 结果进行分组

sql - 如何在 SQL Server 中随机生成的结果集上添加序列号?

sql - 我该如何为此编写sql函数?

sql-server-2008 - 字符串比较因 varchar 变量失败

c# - 我如何在 C# 控制台应用程序中执行 CMD 命令?