2010-04-07 361 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