【问题标题】:Create table using stored procedure使用存储过程创建表
【发布时间】:2014-07-23 10:09:48
【问题描述】:

我正在尝试创建一个包含两列的表,其中一列应该是日期在 2013 年 7 月 21 日到今天之间的日期。使用 sql server 2008r2 并保持系统日期类型相同。

请有人指导我,因为我需要尽快这样做。

【问题讨论】:

  • 在您的循环中使用dateadd() 方法将天数添加到 getdate() 并将此值存储在您的表中
  • 这不能回答我的问题......所以当我插入列时,我应该使用(a, dateadd()) 声明任何变量,如@start?

标签: sql stored-procedures sql-server-2008-r2


【解决方案1】:

这样的东西应该可以工作

DECLARE @currentDate datetime = Convert(datetime, '2013/07/21', 111)

WHILE @currentdate < getdate()
BEGIN
    INSERT INTO <your_table>
    (<your_date_column>)
    VALUES
    (@currentDate)

    SET @currentDate = dateadd(dd, 1, @currentDate)
END
GO

【讨论】:

    【解决方案2】:

    试试这个:

    IF OBJECT_ID('TABLE_CREATION') IS NOT NULL
    DROP PROCEDURE TABLE_CREATION
    GO 
    
    CREATE PROCEDURE TABLE_CREATION
    AS
    DECLARE @StartDate date;
    DECLARE @i bigint;
    
    SET @StartDate = '2001/01/01'
    SET @i=1;
    
    EXECUTE('
            if object_id(''table_name'') is not null
            drop table table_name
    
            create table table_name (column1_name date, column2_name varchar(max))
            WHILE @StartDate < getdate()
            BEGIN
                 insert into table_name (column1_name, column2_name) VALUES (@StartDate,@i)
                 SET @i=@i+1;
                 SET @currentDate = dateadd(dd, 1, @currentDate)
            END
     ')
    
     GO
    
    EXEC TABLE_CREATION
    

    【讨论】:

    • 列日期是一个日期范围,开始日期为今天,结束日期为今天。
    • 当你复制我的代码时,你应该用你的 @startDate 变量名替换所有 @currentDate 变量名 ;-)
    • 谢谢。它帮助很大
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 2023-04-03
    • 2011-03-21
    • 2015-05-11
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多