如何在执行时创建增量表

时间:2016-07-24 18:02:52

标签: sql sql-server

我想知道如何创建增量表,以便在执行过程时,该表包含与用于执行过程的参数相同的行数。

例如,如果我执行此操作:

EXEC PROCEDURE [dbo].[insert_number] 5

我应该有一张桌子(让我们调用表格' Number')显示以下内容:

NumberID
1
2
3
4
5

如果我将EXEC中的数字更改为:

EXEC PROCEDURE [dbo].[insert_number] 7

应输出:

  NumberID
    1
    2
    3
    4
    5
    6
    7

我不想使用sys.objects方法,因为这需要使用主数据库。

执行此类插入的最佳方法是什么?

谢谢

3 个答案:

答案 0 :(得分:0)

误解了这个问题,所以问题是表格应该根据参数自动增加..

create proc usp_test1 
(
@n int
)
as
begin
if object_id('number','u') is not null
drop table number

create table dbo.number
(
id int
);


with cte
as
(
select 1  as n
union all
select n+1 from cte
where n<@n
)
insert into number
select * from cte c  where not exists(select 1 from number n where n.id=c.n)

end

您也可以只创建一次表并注释掉表创建脚本

答案 1 :(得分:0)

如果您没有(或想要)数字/计数表,我使用UDF来创建动态范围。

$env:chocolateyProxyPassword

返回

Select NumberID=cast(RetVal as int) from [dbo].[udf-Create-Range-Number](1,10,1)

UDF

NumberID
1
2
3
4
5
6
7
8
9
10

答案 2 :(得分:0)

另一种更简单的方法是......

CREATE PROCEDURE [dbo].[insert_number]
  @Number INT
AS
BEGIN
  SET NOCOUNT ON;

    SELECT TOP (@Number) Numbers
    FROM 
    (
        SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n + 10000*Tenthousands.n Numbers
        FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
             (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
             (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
             (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n),
             (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) Tenthousands(n)
    )  t
    ORDER BY Numbers

END