2013-07-22 21 views
1

我正在將一些表從一個SQL Server導入到另一個表,每天晚上,表應在目標上有一個DDMMYYYY修正。我想不出在導入過程中更改名稱的方法,並且想到在導入後重命名它。我也卡在這裏,因爲我無法使SP_RENAMESP_RENAME 'TABLE_NAME' 'TABLE_NAME+DDMMYYYY'的格式工作。將某些表重命名爲表名+ DDMMYYYY

+0

您是否考慮添加日期列並將所有數據保存在單個表中,而不是每天覆製表格?當數據分散在許多表中時,查詢變得困難。 – JSR

回答

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 '''[email protected]+''','''[email protected][email protected]+'''' 

EXEC(@Query) 

哦,看看this link閱讀SQL Server上有關動態SQL。

+0

謝謝!這是我正在尋找的。這符合我的要求,我無需任何手動干預即可自動運行整個系統。 –

+0

@nirajkumar:在這種情況下,更簡單的解決方案是:'EXEC sp_rename'MySchema.OldTableName','NewTableName20130722','OBJECT''? –

+0

@BogdanSahlean ?,這將是一個更簡單的解決方案,對日期進行硬編碼,而這不是問什麼 – Lamak

1

執行在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+C, Ctrl+V,F5)。