Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 Server 2005更新查询_Sql_Sql Server - Fatal编程技术网

左联接不起作用的SQL Server 2005更新查询

左联接不起作用的SQL Server 2005更新查询,sql,sql-server,Sql,Sql Server,我试图在SQLServer2005中使用左连接执行更新查询,但由于某些原因,它无法工作 [编辑:不工作-抱歉,这意味着更新未运行。记录未更新。我在SRSS报告中运行此更新查询,因为我使用的CRM不允许直接访问数据库-它运行选择、更新、插入、删除操作,但如果事情不按预期工作,则不会向您提供有用的错误消息。在他不幸黑了!] 我的SQL语句如下所示: UPDATE [tblSlots] SET [tblSlots].[PublishedStartTime] = '10:00' FROM tblSlot

我试图在SQLServer2005中使用左连接执行更新查询,但由于某些原因,它无法工作

[编辑:不工作-抱歉,这意味着更新未运行。记录未更新。我在SRSS报告中运行此更新查询,因为我使用的CRM不允许直接访问数据库-它运行选择、更新、插入、删除操作,但如果事情不按预期工作,则不会向您提供有用的错误消息。在他不幸黑了!]

我的SQL语句如下所示:

UPDATE [tblSlots]
SET [tblSlots].[PublishedStartTime] = '10:00'
FROM tblSlots
LEFT JOIN tblDays ON tblSlots.SlotDayID = tblDays.DayID
WHERE tblDays.Published = 1
如果我去掉左边的连接行,只过滤例如tblSlots.SlotID,更新工作正常

但我希望能够一次更新所有发布日期的插槽

我试着加入,但也没用

我相信这是非常明显的…

你可以试试:

UPDATE [tblSlots]
SET [tblSlots].[PublishedStartTime] = '10:00'

FROM [tblSlots] ,
(
    SELECT DayID FROM
    [tblSlots]
    LEFT JOIN tblDays 
    ON tblSlots.SlotDayID = tblDays.DayID
    WHERE tblDays.Published = 1
) AS [Data_Days]

WHERE 
[Data_Days].DayId = [tblSlots].SlotDayID

您的查询语法在我看来很好,正如您所说,在您尝试执行更新之前,它运行得很好。这是一个无中生有的尝试,但是如果问题是在从多个表中选择时进行更新,那么可能只需将您的查询更改为不加入tblDays即可

UPDATE [tblSlots]
--SET [tblSlots].[PublishedStartTime] = '10:00'
SET [tblSlots].[PublishedStartTime] = (select SomeValue from tblDays where DayID = SlotDayID) --If a value is needed from Day table
FROM tblSlots
Where SlotDayID in (select DayID from tblDays WHERE Published = 1 and DayID is not null)

什么不起作用?旁白:tblDays中只有一条记录吗?看起来你的更新会更新tblDays中运行过的所有记录。我想你会有类似于WHERE…和tblDays的内容。DateOfPublication='03-15-2019'。首先尝试使用类似的select-这将帮助你看到正在解释ql。从tblSlots s LEFT JOIN tblDays d ON tblSlots.SlotDayID=tblDays.DayID WHERE tblDays.Published=11中选择s.*,d.*。使用WHERE tblDays.Published=1将外部联接转换为内部联接2。该阶段不起作用。运行上述查询时的实际结果是什么?您得到了什么结果ect替代?您好,抱歉,我更新了问题,更详细地说明了什么不起作用。-25年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表样式被正确的ANSI连接语法所取代,其用法是discouraged@skyflakes我试过了,但是记录没有更新,因为我没有任何信息n从这个系统的错误,我不知道为什么它不起作用…感谢您的尝试!我仍然无法从相关表中提取数据用于更新位,尽管…您可能可以通过子查询获得日表值,我用这种方法更新了答案。我正是这样想的昨晚睡觉-非常感谢,你的代码工作得很好!