Sql server 更新和限制的语法不正确
我从Superbase“Dailylog2”创建了一个SQL db文件,然后打开该文件,基本上我试图更新表中的一行,dbo.SX_Tom_Table,但是我得到了一个错误Sql server 更新和限制的语法不正确,sql-server,tsql,sql-update,Sql Server,Tsql,Sql Update,我从Superbase“Dailylog2”创建了一个SQL db文件,然后打开该文件,基本上我试图更新表中的一行,dbo.SX_Tom_Table,但是我得到了一个错误 UPDATE [SX_Tom_db].[dbo].[SX_Tom_Table] SET [AI_Field] = Dailylog2.dl_doc_fax FROM Dailylog2 WHERE CONVERT(varchar(10), Dailylog2.dl_dos, 101) = CONVERT(v
UPDATE [SX_Tom_db].[dbo].[SX_Tom_Table]
SET [AI_Field] = Dailylog2.dl_doc_fax
FROM Dailylog2
WHERE
CONVERT(varchar(10), Dailylog2.dl_dos, 101) = CONVERT(varchar(10), 'May/20/2010', 101)
AND dl_chart = 912
LIMIT 1
我得到一个错误:
Msg 102,15级,状态1,第7行“限制”附近语法不正确
如果我删除
限制1
,则它可以工作,但会更新所有行。我只想更新WHERE选择的行,以获得更准确的答案,您应该告诉我们问题范围内每个表的列
表格:[SX\u Tom\u db].[dbo].[SX\u Tom\u表格]
列:[AI_字段]
表格:[每日日志2]
列:dl\U dos、dl\U图表
表[SX_Tom_db].[dbo].[SX_Tom_table]中的列X必须与[Dailylog2]的列Y具有相同(不同…)的值
首先使用SELECT
语句查看您的条件是否返回要更改的预期行
SELECT * FROM [SX_Tom_db].[dbo].[SX_Tom_Table] S
-- This inner join you should put the columns that must be equal in both table.
INNER JOIN
[Dailylog2] D ON S.[?] = D.[?]
WHERE
CONVERT(varchar(10), D.dl_dos, 101) = CONVERT(varchar(10), 'May/20/2010', 101)
AND D.dl_chart = 912
如果上面的查询返回预期的行,则可以应用更新
UPDATE
S
SET
[AI_Field] = D.dl_doc_fax
FROM
[SX_Tom_db].[dbo].[SX_Tom_Table] S
-- This inner join you should put the columns that must be equal in both table.
INNER JOIN
[Dailylog2] D ON S.[?] = D.[?]
WHERE
CONVERT(varchar(10), D.dl_dos, 101) = CONVERT(varchar(10), 'May/20/2010', 101)
AND D.dl_chart = 912
您使用的是哪种数据库管理系统?(该代码是特定于产品的。)您可以共享错误消息吗?如果您使用WHERE子句运行一个简单的SELECT*,您会得到要更新的特定行还是所有行?从Dailylog2 WHERE CONVERT(varchar(10),Dailylog2.dl_dos,101)=CONVERT(varchar(10),'May/20/2010',101)中选择*dl_chart=912工作正常,如果我使用这段代码,它会找到带有WHERE条件的3条记录:UPDATE[SX_Tom_db].[dbo].[SX_Tom_Table]SET[AI_Field]=dailyllog2.dl_doc_fax FROM Dailylog2 WHERE CONVERT(varchar(10),Dailylog2.dl_dos,101)=CONVERT(varchar(10),'May/20/2010',101)dl_chart=912 LIMIT 1I我收到错误消息:Msg 102,级别15,状态1,第7行“LIMIT”附近的语法不正确。嗨,弗拉维奥,很抱歉没有早点给你回复。到目前为止,我已经取得了一些进展。我现在一直在比较两个日期列字段。值为2019-06-15的sx_dos(date,null)和值为2011-07-05 00:00:00:000的Field_Ak(datetime,null)。虽然日期显示在不同表格的两列中,但我无法成功进行比较。我尝试过使用convert和cast,但没有成功。你能提供一些想法吗?我使用了以下代码,使用不同的数据类型和cast和convert.UPDATE[SX_Tom_db].[dbo].[SX_Tom_Table]SET[AI_Field]=dailyllog.SX_fax FROM dailyllog WHERE cast(dailyllog.SX_dos AS VARCHAR(10))=cast(AK_Field AS VARCHAR(10))我使用了不同的数据类型,但没有成功。这很难帮助您,因为我们不知道表[列]的结构:[SX\u Tom\u db].[dbo].[SX\u Tom\u Table]
和[dailyllog2]
。我们没有两个表的数据样本以及您想要的预期结果。很抱歉。以下是最后一个执行正常但未返回任何记录的代码。我知道在SX_Tom_表和Dailylog表中有相同值的日期。从[SX_Tom_db].[dbo].[SX_Tom_表]的内部联接[Dailylog]D ON S.[AC_字段]=D.[SX_图表]其中CONVERT(varchar(10),D.SX_dos,101)=CONVERT(varchar(10),S.AK_字段,101)