我以前从未写过存储过程。我正在使用SSMS 2014,并且尝试基于日期比较插入记录。
从本质上讲。我想获取表 B 中的 MAX 日期。我想将其存储在某个地方,然后只插入日期为>大于表B的最大日期的表 A 中的记录。我使用错误的方法吗?我收到错误消息:除非在HAVING子句或选择列表中包含的子查询中,否则聚合不能出现在ON子句中,并且正在聚合的列是外部引用。
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
答案 0 :(得分:2)
由于没有太多的细节,所以这里有很多猜测,但是也许您正在寻找类似的东西?您很有可能需要关联子查询,但实际上不确定您的需求是什么。
SELECT *
FROM dbo.Table1 A
where A.LastDate >
(
select max(B.LastDate)
from dbo.Table2 B
)
答案 1 :(得分:2)
由于您只希望如{em>所述,只插入TableA
中的列,而只插入日期为>大于表B的最大日期的表A ,因此可以在联接中使用派生表。
SELECT A.*
FROM dbo.Table1 A
INNER JOIN (select max(LastDate) DT from dbo.Table2) b
ON A.LastDate > b.DT
或者在一个WHERE
子句中,这样会更快。
SELECT A.*
FROM dbo.Table1 A
WHERE A.LastDate > (select max(LastDate) DT from dbo.Table2)
答案 2 :(得分:2)
您可以实现以下目标:
如果您需要插入数据,则可以使用#
Select ... Insert