【发布时间】:2018-07-23 15:50:58
【问题描述】:
我以前从未编写过存储过程。我正在使用 SSMS 2014,我正在尝试根据日期比较插入记录。
基本上如此。我想获取表 B 中的 MAX 日期。我想将它存储在某个地方,然后只插入表 A 中的记录,该表的日期大于表 B 的最大日期。我使用了错误的方法吗?我收到错误:聚合不能出现在 ON 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且正在聚合的列是外部引用。
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT * FROM dbo.Table1 A
INNER JOIN dbo.Table2 B
ON CONVERT(VARCHAR, A.LastDate, 101) > CONVERT(VARCHAR, MAX(B.LastDate), 101)
END
【问题讨论】:
-
两大问题。首先,您永远不应该将日期转换为字符串进行比较。其次,如果你使用 varchar,你应该总是指定一个大小。对于手头的问题,似乎子查询或 cte 可能更适合手头的任务。
-
我总是将 varchar 转换为日期,而不是将日期转换为字符串。
-
不,您正在将 LastDate 列转换为 varchar(它是一个字符串)。
-
你是对的。我的错。
标签: sql-server