【问题标题】:How to SELECT * into a SQL table incremntally by date?如何按日期将 * SELECT * 增量到 SQL 表中?
【发布时间】:2014-12-07 00:13:16
【问题描述】:
我有一个名为“tblProducts”的 SQL Server 表。
有时我会用这个简单的查询复制这个表来备份它:
SELECT *
INTO [test01].[dbo].[tblProducts_20141206]
FROM [test01].[dbo].[tblProducts]
每次进行备份时,日期都会包含在表名中。
我想创建一个每周运行一次此类查询的 SQL 作业。
是否有可能在存储过程中或声明一个变量来实现这一点,从而允许将备份表名称命名为 [tblProducts_todaysDate]?
谢谢。
【问题讨论】:
标签:
sql-server
backup
increment
sql-job
【解决方案1】:
如果您使用的是 SP,您可以执行以下操作:
CREATE PROC sp_createATable
@name VARCHAR(20) AS
CREATE TABLE @name
...
do your insert
或者,如果您愿意,无需 SP:
DECLARE @name varchar(20)
SET @name = 'tblName' + SELECT CONVERT(VARCHAR(8), GETDATE(), 112) AS [YYYYMMDD]
CREATE TABLE @name
...
do your insert
【解决方案2】:
您需要Dynamic SQL 来创建带有日期的表名。
CREATE PROC usp_createtable( @tablename VARCHAR(20),
@Dbname VARCHAR(20),
@SchemaName VARCHAR(20))
AS
BEGIN
DECLARE @sql NVARCHAR(max)
SET @sql =' SELECT * INTO '+@Dbname+'.'+@SchemaName+'.'+@tablename+'CONVERT(VARCHAR(8), GETDATE(), 112) FROM '+@Dbname+'.'+@SchemaName+'.'+@tablename''
EXEC sp_executesql
@sql
END