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