【问题标题】:How can I create a stored procedure which takes values from a table and insert them into new table如何创建一个从表中获取值并将它们插入新表的存储过程
【发布时间】:2016-12-09 12:05:02
【问题描述】:

如何在 SQL 中创建一个存储过程,它接受名称、区域、开始日期、结束日期作为来自表的输入,并将名称、区域和日期插入到表中(具有 3 列名称、区域、日期),用于开始日期之间的每个日期和结束日期。

【问题讨论】:

  • 新表是什么意思?
  • @ManojKumar 。 . .函数不会修改数据库状态 (msdn.microsoft.com/en-us/library/ms186755.aspx)。您可能打算使用存储过程,因此提示是:CREATE PROCEDURE
  • 这是一个包含 3 列名称、区域和日期的表格

标签: sql sql-server


【解决方案1】:

这是不可能的。您不能在 SQL Server 的函数中执行 DDL 和 DML 操作。

正如 Gordon 所建议的,您需要使用存储过程来实现这一点。

这是一个开始的例子

http://www.sqlinfo.net/sqlserver/sql_server_stored_procedure_INSERT.php

【讨论】:

  • @Darknight 你能告诉我如何创建 sp 以达到预期的结果
  • @DhanuKumar :检查答案中的链接。
  • 感谢您的链接!.. 但该链接仅显示使用存储过程的正常插入,但在这里我需要为 startdate 和 enddate 之间的每个日期插入一条记录
【解决方案2】:
DECLARE @name NVARCHAR(20) = 'name';
DECLARE @area NVARCHAR(20) = 'area';
DECLARE @startDate DATE = '2016-11-30';
DECLARE @endDate DATE = '2016-12-30';

DECLARE @currentDate DATE = @startDate;

SELECT
    @currentDate AS Date
INTO
    #dates;

WHILE(@currentDate < @endDate)
    BEGIN
        SET @currentDate = DATEADD(d, 1, @currentDate);
        INSERT INTO #dates
        VALUES( @currentDate);
    END;

SELECT
    @name,
    @area,
    *
FROM
    #dates;

您可以获取变量作为参数并使用最后一个 select 语句来创建您的新表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多