使用所选参数作为表标题SQL创建表
我的当前代码如下所示,无法工作。我想创建一个标题为cor_@dt的表,在本例中,@dt是所选的日期参数,即2013年8月14日使用所选参数作为表标题SQL创建表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的当前代码如下所示,无法工作。我想创建一个标题为cor_@dt的表,在本例中,@dt是所选的日期参数,即2013年8月14日 USE [dWA_NSCC] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- exec [CORP\Eng].[No_Indx] '8/14/2013', '1' ALTER PROCEDURE [CORP\Eng].[No_Indx] (@dt datetime, @numb int) AS BEG
USE [dWA_NSCC]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- exec [CORP\Eng].[No_Indx] '8/14/2013', '1'
ALTER PROCEDURE [CORP\Eng].[No_Indx]
(@dt datetime, @numb int)
AS
BEGIN
DROP TABLE @dt
CREATE TABLE @dt
(
ticker varchar(50),
no_indx_cusip varchar(50),
benchmark_cusip varchar(50),
maxcor decimal(10,5),
regcoef decimal(10,5),
dt_pnts int
)
... some more code
好吧,暂时忘记这闻起来非常非常糟糕,这段代码将创建一个名为08/14/2013.cor的表。请注意,在所有引用它的代码中,由于它以数字开头并包含错误字符,因此必须在名称周围使用[方括号]
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'CREATE TABLE ' + QUOTENAME(CONVERT(CHAR(10), @dt, 101) + '.cor')
+ '
(
ticker varchar(50),
...
);';
EXEC sp_executesql @sql;
更好的设计是使用一个带有附加列的表(可能用作聚集索引),然后您可以插入某一天的压力测试信息,该天的查询可以与另一天的查询来自同一个表。您可以这样做:
CREATE TABLE _temp (
-- Columns here
)
EXEC sp_rename _temp, @newtablename
有了它,您可以将@newtablename设置为您想要的任何名称。这就引出了一个显而易见的问题。您为什么要尝试创建名称中包含日期的表?这通常是糟糕数据库设计的一个危险信号。是否确实要创建一个名为8/14/2013的表?为什么,为什么,为什么?为什么您每天都要创建一个新表,为什么该表以日期命名?它包含什么?@euge1220,不要每天创建一个表。添加一个INSERT_DATE列并将所有数据存储在一个表中。在使用讽刺时,我们应该能够指定不同的字体颜色。@Declan_K你只能对人们讲这么多道理。有时这只是要求,他们也无法解决。@Declan_K另外,我更希望有一个解释解决方法的答案,但也能解释危险,而不仅仅是解释解决方法的答案。你认为哪个更令人鼓舞?你认为哪个对其他读者更好?我会在附加专栏中采纳你的建议。我不是一个程序员,我只是需要使用SQL有时为信息兼容