Guru请帮助我。
我有一个名为img
的主表,我们每个月都会创建新的表格和后缀,其中包含月份和年份Character
,<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react-dom.min.js"></script>
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="app"></div>
<script type="text/jsx">
var App = React.createClass({
handleClick: function(e) {
if (e.type === 'click') {
console.log('Left click');
} else if (e.type === 'contextmenu') {
console.log('Right click');
}
},
render : function(){
return <p onClick={this.handleClick} onContextMenu={this.handleClick} >Something </p>
}
});
React.render(<App />, document.getElementById('app'));
</script>
</body>
</html>
。
我必须保留这些表7年,并删除任何超过7年的表。
因此,该作业将于2017年2月删除ABC
,ABC_012010
将于2017年3月删除,依此类推
作业每月运行一次,以检查和删除符合条件的任何表格。
答案 0 :(得分:0)
尝试:您需要dynamic query, loop and temporary tables
才能执行此操作,并且您的表格格式必须与示例中提到的格式相同。您可以在多个表格中以这种方式执行INSERT, UPDATE, DELETE, DROP, TRUNCATE
:
--Selecting table name in date format with `LEFT` `RIGHT` function
SELECT name,
CAST(CONCAT(LEFT(RIGHT(name, 6), 2), '-01-', RIGHT(RIGHT(name, 6), 4)) AS DATE) AS tableDate,
CAST(GETDATE() AS DATE) AS currentDate
INTO #tmp_date
FROM sys.objects
WHERE TYPE = 'u' AND NAME LIKE 'ABC[_]%'
--Storing table names that are older than 7 years from current date
SELECT id = IDENTITY(INT, 1, 1),
NAME
INTO #object_name FROM #tmp_date
WHERE (DATEDIFF(MM,tableDate, currentDate)-1) > = 84
DECLARE @i INT = 1, @j INT, @sql VARCHAR(500), @object_name VARCHAR(100)
SELECT @j = MAX(id) FROM #object_name
WHILE @i < = @j
BEGIN
SELECT @object_name = NAME FROM #object_name WHERE id = @i
SET @sql = 'DELETE FROM ' + @object_name --can use `DROP` to drop the table
EXEC (@sql)
SET @i = @i+1
END
答案 1 :(得分:0)
尝试以下方法:
System Traces/NaiveIntegrator.trace
将 DBNAME 替换为您的数据库名称。
HTH!
感谢。
答案 2 :(得分:0)
您可以使用dynamic query, while and if conditionals
构建存储过程或预定作业(如您所愿)来解决此问题。试试这个。
CREATE PROCEDURE dbo.delete_abc @Date date, @years_diff int
AS
--- Declare variables to use
DECLARE @sqlCommand varchar(30)
DECLARE @table varchar(20)
DECLARE @month int
DECLARE @year int
--- Temporary table with 'ABC_'s table names
SELECT TABLE_NAME
INTO #Temp
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'ABC_%'
AND TABLE_TYPE='BASE TABLE' -- If you want only tables
---- While there are tables to compare
WHILE EXISTS(SELECT * FROM #Temp)
BEGIN
--- Extract Month and Year of the first row in 'ABC_'s table
SET @month = (SELECT TOP 1 SUBSTRING(TABLE_NAME,5,2) FROM #Temp)
SET @year = (SELECT TOP 1 SUBSTRING(TABLE_NAME,7,4) FROM #Temp)
--- Compare if date difference of the table is more than @years_diff years from @Date
IF DATEDIFF(YEAR, CAST(CAST(@year AS VARCHAR) + '-' + CAST(@month AS VARCHAR) + '-01' AS DATE), DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date), 0)) > @years_diff
BEGIN
--- Construct and execute delete query
SET @table = (SELECT TOP 1 TABLE_NAME FROM #Temp)
SET @sqlCommand = 'DROP TABLE ' + @table --- or 'DELETE FROM ' if you only want to delete all rows from table
EXEC(@sqlCommand)
END
--- Delete first row of 'ABC_'s tables in temporary
DELETE TOP (1) FROM #Temp;
END
--- Drop temporary table
DROP TABLE #Temp
GO;
创建后,您可以使用此存储过程或您喜欢的参数:
DECLARE @Now date
SET @Now = GETDATE()
EXEC dbo.delete_abc @years_diff = 7, @Date = @Now
答案 3 :(得分:-1)
制作删除查询不是很容易吗?
Delete From [Your_Table] Where [Date_Column] = 'ABC_012010'