将一些表重命名为表名+ DDMMYYYY

时间:2013-07-22 19:02:24

标签: sql-server sql-server-2008

我每晚都会将一些表从一个SQL Server导入到另一个SQL Server,并且该表在目标位置应该有一个DDMMYYYY个sufix。我想不出在导入过程中改变名称的方法,并考虑在导入后重命名它。我也被困在这里,因为我无法让SP_RENAME以格式SP_RENAME 'TABLE_NAME' 'TABLE_NAME+DDMMYYYY'工作。

2 个答案:

答案 0 :(得分:2)

嗯,首先,听起来你应该将这些表加载到一个表上并使用另一列来存储日期。不过,您可以根据需要使用动态SQL:

DECLARE @Date NVARCHAR(8), @Table NVARCHAR(500), @Query NVARCHAR(2000)

SELECT @Date = CONVERT(VARCHAR(8),GETDATE(),112)
SET @Table = 'TABLE_NAME'
SET @Query = 'EXEC sp_rename '''+@Table+''','''+@Table+@Date+''''

EXEC(@Query)

哦,看看this link,了解SQL Server上的动态SQL。

答案 1 :(得分:2)

在SQL Server Management Studio中执行此脚本Ctrl+T(文本输出),F5(执行))以生成另一个T-SQL脚本:

SET NOCOUNT ON;
GO

DECLARE @StartDate DATETIME,@EndDate DATETIME;
SELECT  @StartDate='2013-07-10T00:00:00',
        @EndDate='2013-07-23T00:00:00';

PRINT 'BEGIN TRANSACTION;'

SELECT  'EXEC sp_rename '
        +''''
        +QUOTENAME(s.name)+'.'+QUOTENAME(t.name)
        +''','''
        +QUOTENAME(t.name+STUFF(STUFF(CONVERT(VARCHAR(25),t.create_date,103),3,1,''),5,1,''))
        +''', ''OBJECT'''
FROM    sys.tables t
JOIN    sys.schemas s ON t.schema_id=s.schema_id
WHERE   t.create_date BETWEEN @StartDate AND @EndDate
--AND   t.name LIKE '%pattern%'

PRINT 'ROLLBACK;'
PRINT '-- COMMIT;'

SET NOCOUNT OFF;
GO

生成的示例输出/脚本(Message panel):

BEGIN TRANSACTION;    
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EXEC sp_rename '[dbo].[NodesOrder]','[NodesOrder19072013]'
EXEC sp_rename '[dbo].[RateTable]','[RateTable19072013]'
EXEC sp_rename '[dbo].[A]','[A22072013]'
EXEC sp_rename '[dbo2].[A]','[A22072013]'
EXEC sp_rename '[dbo].[ConstraintTest]','[ConstraintTest17072013]'
ROLLBACK;
-- COMMIT;

现在,执行此脚本(Ctrl+CCtrl+VF5)。