SQL Server:根据参数表删除行

时间:2016-12-19 13:56:29

标签: sql-server tsql stored-procedures sql-delete

我想创建一个存储过程,允许您从表中删除旧行。 我有一个参数表,其中包含表的名称,表所在的数据库的名称,模式名称,PartDate(日,月,年)和持续时间。

如果一个或多个表存在不同的参数,我想测试参数表。 我删除了存储时间超过3年的行,例如

BEGIN

SET NOCOUNT ON;

Declare @SourceDatabase nvarchar(255)
Declare @SourceSchema nvarchar(255)
Declare @SourceTable nvarchar(255)
Declare @DatePart nvarchar(255)
Declare @Duration bit

Set @SourceDatabase = 'DATABASE'
Set @SourceSchema = 'dbo%'
Set @SourceTable = 'TEXT_OLD'
Set @DatePart = 'Day'
Set @Duration = -75

Declare @SQL NVARCHAR(MAX)

    BEGIN TRY 
        --Delete the rows in the table
        SELECT @SQL =N'IF EXISTS (SELECT * FROM CORE.[dbo].[HistoryPeriod] 
        WHERE SourceSchema = @SourceSchema
                  AND SourceTable = @SourceTable 
                  --AND Duration = @Duration
               --   AND DatePart= @DatePart
          )

    BEGIN
            -- DELETE row of table 
            EXEC('
                    DELETE FROM [' + @SourceDatabase + '].[' + @SourceSchema + '].[' + @SourceTable + ']
                    WHERE TIMESTAMP < DATEADD([' + @DatePart+ '],[' + @Duration+ '],GETDATE())
            ')
            '
         EXEC sp_executesql @SQL

    END
END

你能帮我吗?

0 个答案:

没有答案