Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果存在选择变量,则无法访问_Sql_Sql Server - Fatal编程技术网

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

Sql 如果存在选择变量,则无法访问,sql,sql-server,Sql,Sql Server,我很难找到正确的语法,使这项工作 我有一个带有id和color列的表,我想打印出特定颜色的所有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

我很难找到正确的语法,使这项工作

我有一个带有id和color列的表,我想打印出特定颜色的所有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
未定义id

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

您可以这样做:

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

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

您可以这样做:

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

您只需要
从mytable中选择id,其中color='red


这将返回颜色为红色的每个id。如果没有,那么您将在数据集中得到一行,id列中有一行

您只需要
从mytable中选择id,其中color='red


这将返回颜色为红色的每个id。如果没有,那么您将在数据集中得到一行,id列中只有一个值

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不是为方便打印查询结果而设计的-您最好返回一个结果集,让消费者打印结果。

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不是为方便打印查询结果而设计的-您最好返回一个结果集,让消费者打印结果。

很抱歉,我的示例不太适合我所尝试的,我刚刚更新了:-)@jamesla。您的代码中仍然存在问题。ID是列名,不是变量。您必须像John那样声明一个变量。这只打印1个id,而不是指定颜色的所有id。(不是你的错,我意识到我遗漏了这一点,并在你发布这篇文章后更新了这个问题。很抱歉,我的例子不太适合我所要做的,我刚刚更新了:-)@jamesla。您的代码中仍然存在问题。ID是列名,不是变量。您必须像John那样声明一个变量。这只打印1个id,而不是指定颜色的所有id。(这不是你的错,我意识到我遗漏了这一点,并在你发布这篇文章后更新了问题)。你为什么使用SQL的
PRINT
?SQL的设计不是为了方便地“打印”查询结果。它只是一个人为的例子。为什么要使用SQL中的
print
?SQL的设计不是为了方便地“打印”查询结果。它只是一个人为的例子。最后一句话是不正确的。如果没有,那么他们将得到一个空的结果集。这在技术上是正确的,但是我的示例是人为的,因为我需要使用id运行其他查询,所以我们需要坚持使用print。最后一句话不正确。如果没有,那么他们将得到一个空的结果集。这在技术上是正确的,但是我的示例是人为的,因为我需要使用id运行其他查询,所以我们需要坚持使用打印。好的,这就是我要找的。很抱歉,我试图简化我的示例,我想我把它简化了,但光标正是我要找的,谢谢。好的,这就是我要找的。很抱歉,我试图简化我的例子,我想我做到了简单,但光标正是我要找的,谢谢。