2010-04-07 336 views
3

附加SQL表的名字,我知道我可以用後續的SP更改SQL表:今天的日期

EXEC sp_rename 'customers', 'custs' 

我怎麼會去追加這使新的表有今天的日期作爲後綴?

我嘗試過以下主題的變體,但成功率很低!

EXEC sp_rename 'customers', 'customers +(CONVERT(VARCHAR(8),GETDATE(),3))' 

任何幫助非常感謝。

+1

我可以問_why_你想要做這個?作爲一個規則,我建議將一個字段放入包含日期的表中,並將它保留在一個表中,通常最好將數據編碼到表名中,並需要一個大的UNION語句來讀取表中的數據。 – eftpotrm 2010-04-07 13:08:34

回答

5

這聽起來像是一件非常糟糕的事!你應該評估你的設計,用名字中的日期重新命名你的表格,表明你將會產生很多表格,每個表格都有不同的日期。您可以在表中添加一個日期列,並使用它來區分數據,而不是爲不同的日期創建全新的表。

這就是說,在SQL Server中,您不能將表達式作爲存儲過程的參數。通過嘗試將格式化的日期連接到字符串'customers',您試圖將表達式作爲參數傳遞。

必須存儲在一個局部變量第一的表達式,然後調用存儲過程與局部變量:

DECLARE @Value varchar(500) 
SET @Value='customers' +(CONVERT(VARCHAR(8),GETDATE(),3)) 
EXEC sp_rename 'customers', @Value 
+0

如果可以的話,我會讓你百萬次,這通常是一個非常糟糕的選擇。 – HLGEM 2010-04-07 13:12:12

+0

感謝KM的建議,我注意到,我很可能會修改設計,並按照您所建議的內容,即表中的日期戳來實施。 我對此的一個擔憂是,這張桌子會變大......非常大。除此之外,我的LINQ to SQL將不得不進行修改,目前我還不確定如何修改此內容,以便僅採用最新的「客戶」,即基於日期戳記。 嗯...思考的食物。您可能會看到更多的問題即將推出! – 2010-04-07 13:59:39

+0

@ 8forty,如果你有一張表,你可以很容易地根據'Column ='Value''來查詢,而不需要在表名上添加戲劇性的東西,而這些都是SQL的意圖。設置合適的索引,無論行數如何,它都會很快。如果將表格拆分並用名稱中的日期重新命名,您將不斷構建動態SQL來查詢數據。當你建立一個不存在的表名時,你將會遇到編譯時失敗。擁有外鍵是不可能的。您將擁有瘋狂的UNION來訪問一天中的數據。問這是一個真正的問題,而不是一個評論。 – 2017-01-25 18:33:02

1
DECLARE @TableName varchar(50) 

SELECT @TableName = (SELECT 'Customers_' + convert(varchar(50),GetDate(),112)) 

EXEC sp_rename 'customers', @TableName 
+0

我不能用滴答聲回答,但那是Jon的位置..非常感謝你。 – 2010-04-07 12:54:43

+0

@Ricardo Deano - 沒問題,確保你接受答案,如果它的工作。 – JonH 2010-04-07 12:56:42

2

你的意思是T-SQL,對吧?移動單引號之外的功能。例如:

EXEC sp_rename 'customers', 'customers' +(CONVERT(VARCHAR(8),GETDATE(),3)) 
0

既然你應該幾乎從不這樣做,例如定期在您需要圖從編程的日期,我建議這個偶爾使用:

EXEC sp_rename 'customers', 'customers20100408' 
+1

如果你打算推薦一個日期格式,爲什麼不是YYYYMMDD:'customers20100408'? – 2010-04-07 13:45:14

+1

@KM,我修好了,你是對的,明確的日期會更好。 – HLGEM 2010-04-07 14:14:22