如何使用日期格式创建动态列

时间:2015-09-02 11:00:56

标签: sql-server dynamic-sql

我需要每天动态创建一个表,列如下。

COLUMN1, COLUMN2, (SYSDATE AS) COLUMN3, (SYSDATE-1) COLUMN4, (SYSDATE-2) COLUMN5,..

请建议可行的方法。

1 个答案:

答案 0 :(得分:1)

是的,这是可以实现的,但是Curse and Blessing Dynamic SQL by Erland Sommarskog

  

CREATE TABLE @tbl

     

这里的愿望是创建一个在运行时确定名称的表。

     

如果我们只是查看反对在存储过程中使用动态SQL的参数,那么它们中很少有真正适用。如果存储过程中包含静态CREATE TABLE,则运行该过程的用户必须具有创建表的权限,因此动态SQL不会更改任何内容。计划缓存显然与它无关。等

     

尽管如此:为什么?你为什么想做这个? 如果您正在应用程序中动态创建表,那么您已经错过了一些有关数据库设计的基础知识。在关系数据库中,表和列的集合应该是常量。它们可能会随着新版本的安装而改变,但不会在运行时更改。

     

有时当人们这样做时,他们似乎想要为临时表构建唯一的名称。这是完全没必要的,因为这是SQL Server中的内置功能。如果你说:

     

CREATE TABLE #nisse(一个int NOT NULL)

     

然后幕后的实际名称会更长,没有其他连接可以看到#nisse的这个实例。

     

如果您想创建一个对用户来说唯一的永久表,但您不想保持连接,因此无法使用临时表,那么创建一个所有客户端可以共享的表可能会更好,但是第一列是客户端私有的密钥。我在“如何在存储过程之间共享数据”一文中更详细地讨论了这种方法。