如果存在选择变量则无法访问

时间:2013-09-11 21:20:41

标签: sql sql-server

我无法找到正确的语法来完成这项工作吗?

我有一个包含列id和颜色的表格,我想打印出特定颜色的所有ID。

if exists(select id from mytable where color = 'red')
    print id


if exists(select id from mytable where color = 'red')
    print SCOPE_IDENTITY() --which won't work because i'm using select rather than insert

3 个答案:

答案 0 :(得分:2)

id未定义。

存在子查询中的id不存在于子查询之外。

你可以这样做:

declare @id int;
select @id = id from table_name;
if (@id is not null) 
    print @id;

答案 1 :(得分:2)

PRINT只打印一个值。看起来你想循环遍历结果并打印每个值,这将需要一个光标:

DECLARE @id INT
DECLARE id_cursor CURSOR FOR 
SELECT id from mytable where color = 'red'

OPEN id_cursor

FETCH NEXT FROM id_cursor 
INTO @id

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @id

    FETCH NEXT FROM id_cursor 
    INTO @id
END 
CLOSE id_cursor;
DEALLOCATE id_cursor;

在SQL中看起来很荒谬,这就是为什么我在评论中说SQL不是为了轻松打印查询结果而设计的 - 你可能最好还是返回结果集并让使用者打印结果。

答案 2 :(得分:0)

您只需要select id from mytable where color = 'red

这将返回颜色为红色的每个id。如果没有,那么您将在id列

中的数据集中获得一行