我的代码是SELECT COUNT(*) FROM name_list WHERE [name]='a' LIMIT 1
似乎SQL Server中没有限制子句。那么我怎么说告诉我name_list.name中是否存在'a'?
答案 0 :(得分:4)
IF EXISTS(SELECT * FROM name_list WHERE name = 'a')
BEGIN
-- such a record exists
END
ELSE
BEGIN
-- such a record does not exist
END
注意事项:
SELECT *
- 数据库引擎知道你在问什么IF
仅用于说明 - EXISTS(SELECT ...)
表达式可以回答您的问题BEGIN
和END
严格来说是不必要的答案 1 :(得分:3)
COUNT(*)无论如何都会返回一行,无需限制
LIMIT的ANSI等价物是TOP:SELECT TOP(1) ... FROM ... WHERE...
最后,有EXISTS:IF EXISTS (SELECT * FROM ... WHERE ...)
。
答案 2 :(得分:0)
没有nono错了。
首先有顶部,所以你必须说:
select top 1 1 from name_list where [name]='a'
如果有数据,您将获得一个只有一个未命名字段的行,其中1个没有查询,如果没有数据则根本没有行。
答案 3 :(得分:0)
TOP
子句最接近LIMIT
。以下将返回名称字段等于'a'的第一行中的所有字段(如果多于一行匹配,则返回的行将是未定义的,除非您还提供ORDER BY
子句)。 / p>
SELECT TOP 1 * FROM name_list WHERE [name]='a'
但如果您正在进行COUNT(*)
,则无需使用它。以下将返回一行,其中包含一个字段,该字段是整个表中名称字段eqals为'a'的行数。
SELECT COUNT(*) FROM name_list WHERE [name]='a'
答案 4 :(得分:0)
IF (EXISTS(SELECT [name] FROM name_list where [name] = 'a'))
begin
//do other work if exists
end
你也可以这样做:
IF (NOT EXISTS(SELECT [name] FROM name_list where [name] = 'a'))
begin
//do other work if not exists
end
答案 5 :(得分:0)
此查询完全返回您的预期:
SELECT TOP 1 CASE WHEN EXISTS(SELECT * WHERE [name] = 'a') THEN 1 ELSE 0 END FROM name_list