Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Linq_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

Sql 更新所有行中特定列的查询

Sql 更新所有行中特定列的查询,sql,sql-server,linq,sql-server-2008,sql-server-2005,Sql,Sql Server,Linq,Sql Server 2008,Sql Server 2005,我正在搜索所有行中的check列值,并使用where子句作为条件进行更新。我的情况如下: SubscriptionID ChannelURI StudentID 1 XXXX 4 2 yyyy 4 3 XXXX 3 4 XXXX

我正在搜索所有行中的check列值,并使用where子句作为条件进行更新。我的情况如下:

    SubscriptionID    ChannelURI    StudentID
        1               XXXX             4
        2               yyyy             4
        3               XXXX             3
        4               XXXX             4
        5               XXXX             2
我想检查特定学生和所有匹配结果的列通道uri值,将其设置为null

所以在这种情况下,第3行和第5行应该设置为null

我已经尝试过了,但是它将
studnetid=4
以外的其他行的所有
channeluri
设置为null

UPDATE SubscriptionCourse 
   Set ChannelURI = 1
     , DeviceId = null 
  FROM SubscriptionCourse as t1 
 INNER JOIN SubscriptionCourse as t2 
    on t1.ChannelURI = t2.ChannelURI 
 WHERE StudentId! = 4 
在这种情况下,SubscriptionID必须是主键。

更新表集channeluri=null,其中studentid 4
Update table set channeluri = null where studentid <> 4
那就是你想要的?或者你想找到所有与student 4具有相同uri的文件,并将其设置为null

Update table set channeluri = null from table inner join table t2 on table.channeluri =t2.channeluri where table.studentid <> 4 and t2.studentid =4
table.channeluri=t2.channeluri其中table.studentid 4和t2.studentid=4上的表内部联接表t2中更新表集channeluri=null

类似的情况是,我在手机上看到,妻子偷了电脑

引用了要更新的表,该表使用的是FROM子句中给出的别名,而不是名称(因为同一个表名被引用了两次。在WHERE子句中,还要使用表别名对StudentId的引用进行限定)

UPDATE t1
   SET t1.ChannelURI = 1
     , t1.DeviceId   = NULL
  FROM SubscriptionCourse t1 
  JOIN SubscriptionCourse t2
    ON t1.ChannelURI = t2.ChannelURI
 WHERE t1.StudentId != 4
您说要将ChannelURI设置为NULL,但语句的文字值设置为1。我保留了语句中指定的赋值,但使用表别名限定了列

我不认为这是您的问题,但我从不在“不等于”比较运算符符号(
!=
)中包含空格。我以前从未见过这种情况。我更喜欢使用
符号作为“不等于”比较运算符

从您对问题的描述和示例来看,根本不清楚为什么需要将表连接到自身


我建议您首先编写一条SELECT语句,返回要更新的行,方法是将
update
SET
子句替换为
SELECT
子句,表达式列表中包含主键列的值,要更新的列,以及任何其他要检查的列。一旦SELECT返回要更新的行,然后将其转换为update语句。

您能解释为什么第3行和第5行应设置为null,而其他行不应设置为null的逻辑吗?您确实需要提供更好的描述。您根本不清楚y是什么您正在尝试实现。很抱歉,我没有说清楚:我想检查表中除student=4以外的所有studentid的所有channeluri,如果找到studentid=4通道uri的匹配项,则将匹配的行channeluri设置为null,您认为应该如何做?更新SubscriptionCourse set channeluri=1,DeviceId=null FROM SubscriptionCourse as t1 internal JOIN SubscriptionCourse as t2 on t1.ChannelURI=t2.ChannelURI WHERE StudentId!=4我已经尝试过了,但是它将studnetid=4以外的其他行的所有ChannelURI都设置为Null。情况并非如此,WHERE条件应该是StudentId,在您提交的查询中,我如何知道subscriptionid,如果有更多超过2场比赛?
UPDATE t1
   SET t1.ChannelURI = 1
     , t1.DeviceId   = NULL
  FROM SubscriptionCourse t1 
  JOIN SubscriptionCourse t2
    ON t1.ChannelURI = t2.ChannelURI
 WHERE t1.StudentId != 4