编写一个 T-SQL 存储过程接收 4 个数字并将它们插入到一个表中

Pan*_*tea 5 sql-server stored-procedures t-sql

我需要编写一个存储过程来接收 4 个数字并将它们插入一个表中。这是我迄今为止开发的:

Declare   
@1  Int = 10,
@2  Int = 20,
@3  Int = 30,
@4  Int = 40


Create table #Temp(Num int)
Declare @I char(1) = 1


 While (@I <= 4)
   Begin

         Insert Into #Temp
         Select @I

     SET @I +=1
   end


Select * from #Temp
Drop table #Temp
Run Code Online (Sandbox Code Playgroud)

我知道我可以直接和静态地将输入插入表中,但我只想知道有没有更好的方法来做到这一点?我想使用一个while语句,但问题是 (I) 变量的数字被插入到表中!!我的意思是输出是 1,2,3,4; 我想要的是 10、20、30、40。

Ran*_*gen 11

您还可以在存储过程中使用表值参数类型并通过此 tvp 传递数字。

创建类型

CREATE TYPE GetNumbers AS TABLE   
( Numbers INT );  
GO  
Run Code Online (Sandbox Code Playgroud)

创建程序

CREATE PROCEDURE dbo.InsertNumbers  
@GetNumbers GetNumbers READONLY  
AS   
SET NOCOUNT ON;

CREATE TABLE #Temp(Num int);
INSERT INTO  #Temp(Num)
SELECT Numbers
FROM  @GetNumbers;  
SELECT * FROM #Temp;
DROP TABLE #Temp;
GO  
Run Code Online (Sandbox Code Playgroud)

这里并不真正需要插入临时表,只是为了保持它与问题相同。

用数据填充变量并调用过程

/* Declare a variable that references the type. */  
DECLARE @GetNumbers AS GetNumbers;  

/* Add data to the table variable. */  
INSERT INTO @GetNumbers (Numbers)  
VALUES(10),(20),(30),(40);

/* Pass the table variable data to a stored procedure. */  
EXEC InsertNumbers @GetNumbers;  
Run Code Online (Sandbox Code Playgroud)

此处使用的示例以及更多关于 tvp 的内容


Den*_*kin 7

Declare   
@1  Int = 10,
@2  Int = 20,
@3  Int = 30,
@4  Int = 40

Create table #Temp(Num int)

--1st way
INSERT #Temp(Num)
SELECT @1
UNION ALL
SELECT @2
UNION ALL
SELECT @3
UNION ALL
SELECT @4


SELECT * FROM #Temp

TRUNCATE TABLE #Temp

--2nd way    
INSERT #Temp(Num)
VALUES
    (@1),
    (@2),
    (@3),
    (@4)

SELECT * FROM #Temp

DROP TABLE #Temp
Run Code Online (Sandbox Code Playgroud)


小智 5

CREATE PROCEDURE dbo.InsertFourValues (@I1 int, @I2 int, @I3 int, @I4 int)
AS

BEGIN
  --the table below must already exist
  INSERT INTO dbo.MyTable (MyIntColumn)
  VALUES (@I1), (@I2), (@I3), (@I4);

END
Run Code Online (Sandbox Code Playgroud)

现在您只需使用您的值调用它:

EXEC dbo.InsertFourValues (10, 20, 30, 40);
Run Code Online (Sandbox Code Playgroud)