我的客户数据库中有一个名为DEALER_DETAILED的表。在该表中,STATUS列表示3个参数,如OPERATIONAL,DEACTIVE,NON-OPERATIONAL。
每晚3-6点之间,其中一个参数可能会改变。例如,今天DEALER_CODE状态之一是可操作的但明天之后DEALER_CODE状态将是DEACTIVE。我不想使用触发器,这就是为什么,使用存储过程我需要每天获取该表的副本并编写另一个查询来跟踪更改。
对于复制和跟踪更改,我编写了如下查询,但目前它不起作用。我的意思是我现在无法跟踪更改。
这就是我写的。你能帮我解决一下这个代码有什么问题吗?
> ALTER PROCEDURE [dbo].[sp_CreateDealertTable] AS
>
> BEGIN
>
> SET NOCOUNT ON;
>
> IF EXISTS (SELECT *
> FROM sys.objects
> WHERE object_id = Object_id(N'[dbo].[Dealer_Detailed_old]')
> AND TYPE IN ( N'U' ))
> DROP TABLE [dbo].[Dealer_Detailed_old];
>
> PRINT 'Creating table [dbo].[Dealer_Detailed_old].';
>
> CREATE TABLE dbo.Dealer_Detailed_old ( [DealerCode]
> nvarchar(32),[DealerName] nvarchar(max),[Status] nvarchar(20))
>
> INSERT INTO Dealer_Detailed_old
> SELECT DEALER_CODE,DEALER_NAME,[STATUS] FROM dbo.DEALER_DETAILED
>
> END
step 2---track changes
IF OBJECT_ID('tempdb..#tempstatus') IS NOT NULL
drop table #tempstatus
SELECT * INTO #tempstatus FROM
(
SELECT
old.DealerCode as DEALERCODE, old.[Status] as STATUSOLD ,new.[STATUS] AS STATUSNEW
FROM
[dbo].[Dealer_Detailed_old] as old
INNER JOIN
[dbo].[DEALER_DETAILED] as new ON old.DealerCode = new.DEALER_CODE
WHERE
old.[Status] <> new.[STATUS]
) as tbl2
IF (SELECT COUNT(*) FROM #tempstatus)> 0
答案 0 :(得分:0)
我不明白为什么你总是丢桌子,但没关系。
要跟踪表格上的更改,我通常会这样做(示例):
表1:汽车(ID,颜色,名称) 表2:Cars_log(ID,CarID,颜色,名称,Changed_at)
每当您在Cars-Table中插入内容时,请将其插入Cars_log表中,包括更改时间(Changed_at = NOW())。