Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SQL表名附加到今天';日期_Sql Server_Tsql - Fatal编程技术网

Sql server 将SQL表名附加到今天';日期

Sql server 将SQL表名附加到今天';日期,sql-server,tsql,Sql Server,Tsql,我知道我可以使用以下sp更改sql表: EXEC sp_rename 'customers', 'custs' 我该如何添加它,以便新表以今天的日期作为后缀 我尝试了以下主题的变体,但收效甚微 EXEC sp_rename 'customers', 'customers +(CONVERT(VARCHAR(8),GETDATE(),3))' 非常感谢您的帮助。您是指T-SQL,对吗?将函数移到单引号之外。比如: DECLARE @TableName varchar(50) SELECT @

我知道我可以使用以下sp更改sql表:

EXEC sp_rename 'customers', 'custs'
我该如何添加它,以便新表以今天的日期作为后缀

我尝试了以下主题的变体,但收效甚微

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

非常感谢您的帮助。

您是指T-SQL,对吗?将函数移到单引号之外。比如:

DECLARE @TableName varchar(50)

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

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

这听起来是一件非常糟糕的事情您应该评估您的设计,使用名称中的日期重命名表表明您将生成许多表,每个表对应不同的日期。您可以在表中添加一个日期列,并使用它来区分数据,而不是为不同的日期创建全新的表

话虽如此,您不能将表达式作为SQL Server中存储过程的参数。通过尝试将格式化日期连接到字符串“customers”,您试图将表达式作为参数传递

必须先将表达式存储在局部变量中,然后使用该局部变量调用存储过程:

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

因为你几乎不应该经常这样做,以至于你需要通过编程来计算日期,我建议偶尔使用这个:

EXEC sp_rename 'customers', 'customers20100408' 

我还不能用勾号回答,但这是乔恩的重点。非常感谢。@Ricardo Deano-没问题,如果答案有效,请确保你接受。我可以问一下你为什么要这样做吗?一般来说,我建议在包含日期的表中放入一个字段,并将其全部保存在一个字段中,这比将数据编码到表名中并需要一个大的UNION语句来读取表中的数据更可取。如果可以的话,我会给你上百万次的投票,这通常是一个非常糟糕的选择。谢谢你的建议,请注意,我很可能会修改设计,并按照您的建议实施一些东西,即表内日期戳。我唯一担心的是这张桌子会变大…非常非常大。除此之外,我的LINQ to SQL必须进行修改,目前我不确定如何修改,以便只获取最新的“客户”,即基于日期戳。嗯……值得思考。你很快就会看到更多的问题@840,如果您有一个表,您可以根据
Column='Value'
轻松地查询,而不必对表名进行任何改动,这与SQL的原意是一样的。设置适当的索引,无论行数多少,它都会很快。如果将表拆分并使用名称中的日期重命名它们,您将不断构建动态SQL来查询数据。当您构建一个不存在的表名时,将出现编译时失败。不可能有外键。你将有疯狂的工会来访问跨越一天的数据。作为一个真正的问题而不是评论来提问。@840,您可以通过一个简单的WHERE子句和一个适当的索引轻松访问单个表中的所有数据。否则,您将每天用许多重复的表垃圾邮件发送模式。我不知道你的应用程序,但总的来说,这种设计是个坏主意。如果你需要问怎么做,我会说这是个坏主意。除非你真的知道自己在做什么,否则我会说这是个坏主意。除非你有一个非常具体的理由,否则我会坚持我的说法,那就是这是一个坏主意。如果你对你的设计有什么诚实的评价,针对你的具体情况问一个具体的问题,然后看看答案……如果你打算推荐一种日期格式,为什么不推荐YYMMDD:
customers20100408
?@KM,我修正了它,你是对的,明确的日期更好。