【问题标题】:Incorrect syntax with update and limit更新和限制的语法不正确
【发布时间】:2019-06-14 12:37:11
【问题描述】:

我从 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(varchar(10), 'May/20/2010', 101)   
   AND dl_chart = 912
 LIMIT 1

我得到错误:

消息 102,级别 15,状态 1,第 7 行 'LIMIT' 附近的语法不正确。

如果我删除了LIMIT 1,那么它可以工作,但它会更新所有行。我只想更新 WHERE 选择的行

【问题讨论】:

  • 您使用的是哪个 dbms? (该代码是特定于产品的。)
  • 你能分享错误信息吗?如果您使用该 WHERE 子句运行简单的 SELECT *,您会得到要更新的特定行还是所有行?
  • select * FROM Dailylog2 WHERE CONVERT(varchar(10), Dailylog2.dl_dos, 101) = CONVERT(varchar(10), 'May/20/2010', 101) AND dl_chart = 912 工作正常并找到具有 WHERE 条件的 3 条记录
  • 如果我使用此代码: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, Level 15, State 1, Line 7 'LIMIT' 附近的语法不正确。

标签: sql-server tsql sql-update


【解决方案1】:

要获得更准确的答案,您应该告诉我们问题范围内每个表格的列。

表:[SX_Tom_db].[dbo].[SX_Tom_Table]

列:[AI_Field]、?

表格:[Dailylog2]

列:dl_dos、dl_chart

[SX_Tom_db].[dbo].[SX_Tom_Table] 中的列 X 必须与列中的值相同(不同...)Y [Dailylog2]

首先使用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

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

【讨论】:

  • 您好 Flavio 很抱歉没有尽快回复您。到目前为止,我已经能够取得一些进展。我现在一直在比较 2 个日期列字段。 sx_dos(date,null) 的值为 2019-06-15 和 Field_Ak(datetime,null) 的值为 2011-07-05 00:00:00:000。我无法成功比较,尽管日期出现在不同表格的两列中。我曾尝试使用 convert 和 cast 但没有成功。你能提供任何想法吗?
  • 我使用了以下代码,具有不同的数据类型以及 cast 和 convert.UPDATE [SX_Tom_db].[dbo].[SX_Tom_Table] SET [AI_Field] = Dailylog.sx_fax FROM Dailylog WHERE CAST(Dailylog .sx_dos AS VARCHAR(10)) = CAST(AK_Field AS VARCHAR(10)) 我使用了不同的数据类型但没有成功
  • 很难帮助你,因为我们不知道表[列]的结构:[SX_Tom_db].[dbo].[SX_Tom_Table][Dailylog2]。我们没有两个表的数据样本和您想要的预期结果。对此感到抱歉。
  • 以下是最后一个执行良好但没有返回记录的代码。我知道 SX_Tom_Table 和 Dailylog 表中有相同值的日期。SELECT * FROM [SX_Tom_db].[dbo].[SX_Tom_Table] S INNER JOIN [Dailylog] D ON S.[AC_Field] = D .[sx_chart] WHERE CONVERT(varchar(10), D.sx_dos, 101) = CONVERT(varchar(10), S.AK_Field, 101)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2010-11-19
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多