感谢昨天有关日期转换建议的人,我现在有了一个有效的SELECT脚本。
不幸的是,当我尝试将其转换为UPDATE脚本时,我得到了可怕的
Msg 4104, Level 16, State 1, Line 25
The multi-part identifier "mbrProject.ID" could not be bound.
对于每个匹配的ID(mbrProject。[ID] = ProjectDates。[Project_ID]),整个脚本应该将日期从mbrProject插入到ProjectDates中,同时解析混合的US&英国格式在mbrProject中的日期,因为用户在更新表时具有不正确的国家/地区设置(不能从我的结尾更改)。
Update ProjectDates
SET ProjectDates.[Start_Date] =
(
select right([Start_Date],4) +
case
when len([Start_Date])=10 then
substring([Start_Date],4,2) + left([Start_Date],2)
else right('0' + left([Start_Date],firstIndex-1),2) +
right('0' + substring([Start_Date],firstIndex+1,secondIndex - firstIndex-1),2)
end
from
(
select mp.[Start_Date], charindex('/',mp.[Start_Date],1) firstIndex,
charindex('/',mp.[Start_Date],charindex('/',mp.[Start_Date],1)+1) secondIndex
from mbrProject mp
join ProjectDates pd
on mp.ID = pd.Project_ID
)A
where mbrProject.[ID] = ProjectDates.Project_ID
)
如果我只运行SELECT语句,它可以正常工作,返回正确的值。 即一切来自
select right([Start_Date],4) +
case
到
from mbrProject mp
join ProjectDates pd
on mp.ID = pd.Project_ID
)A
但是,一旦我尝试将其包装在UPDATE语句中,我就会收到错误。
我知道这取决于语法,但无论我在哪里尝试移动内容,我都无法理解它。
有什么想法吗?
由于 克雷格
答案 0 :(得分:0)
试试这个:
UPDATE PR
SET PR.[Start_Date] = A.[Corrected_Start_Date]
FROM ProjectDates PR
JOIN
(
SELECT
[Id],
RIGHT([Start_Date],4) +
CASE
WHEN len([Start_Date])=10
THEN substring([Start_Date],4,2) + LEFT([Start_Date],2)
ELSE RIGHT('0' + LEFT([Start_Date],firstIndex-1),2) +
RIGHT('0' + substring([Start_Date],firstIndex+1,secondIndex - firstIndex-1),2)
END [Corrected_Start_Date]
FROM
(
SELECT
[Id],
[Start_Date],
charindex('/',[Start_Date],1) firstIndex,
charindex('/',[Start_Date],charindex('/',[Start_Date],1)+1) secondIndex
FROM mbrProject
) S
) A
ON A.[ID] = PR.[Project_ID]
答案 1 :(得分:0)
(
select mp.[Start_Date], charindex('/',mp.[Start_Date],1) firstIndex,
charindex('/',mp.[Start_Date],charindex('/',mp.[Start_Date],1)+1) secondIndex
from mbrProject mp
join ProjectDates pd
on mp.ID = pd.Project_ID
)A
在此处最后一行的末尾,名称mp
,pd
,mbrProject
和(内部ProjectDates
)不再作为表名或别名存在。此处适用于此行集的唯一名称是A
,即您提供的别名。
因此,您需要在选择列表中加入mp.ID
,然后在外部比较中使用A.ID
。
另外,我不知道你要做什么,我只是想确保你知道ProductDates
(正在更新的表格)和{{1}指的是该表的两个独立实例,一个是内部实例,另一个是外部实例。我希望最后的pd
应该是:
WHERE
答案 2 :(得分:0)
问题在于做
Update ProjectDates
SET ProjectDates.[Start_Date] = (select ...)
你试图将一行的一个字段设置为子选择语句的结果,我认为这是返回多个值。