Col*_*lin 4 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
Run Code Online (Sandbox Code Playgroud)
2:
SELECT top 1 *
FROM myTable
WHERE columnName IS NOT NULL
and len(convert(varchar,columnName)) > 0
Run Code Online (Sandbox Code Playgroud)
这是因为它们不是同一个查询 - 您的变量文本不会被内联到查询中.
在查询1中,您验证的@c
是非null(true,您设置它)并且它的长度大于0(true,它是10).由于两者都是真的,查询1变为:
select top 1 * from myTable
Run Code Online (Sandbox Code Playgroud)
(它将根据适当的索引返回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
Run Code Online (Sandbox Code Playgroud)
现在当我运行这两个查询时返回相同的结果.你必须告诉我在哪里我歪曲你的实际数据/查询以获得更多帮助(或者只是扩展它以找到解决方案).
归档时间: |
|
查看次数: |
2011 次 |
最近记录: |