T_sql 之存储过程 不同的存储过程进行传值
时间: 2024-10-29 20:03:27 浏览: 11
SQL实现递归及存储过程中In()参数传递解决方案详解
在T-SQL(Transact-SQL,SQL Server的查询语言)中,存储过程是一种预编译的SQL代码块,可以接受输入参数,并返回结果集或更新数据库。在不同的存储过程中传递参数有几种常见的方式:
1. **输入参数**(IN参数):当你调用存储过程并提供数据时,这些参数通常标记为IN,它们接收用户提供的数据。例如:
```sql
CREATE PROCEDURE ProcName @param1 INT, @param2 VARCHAR(50)
AS
BEGIN
-- 这里使用@param1 和 @param2 的值进行操作
END
```
调用时会像这样传递参数:
```sql
EXEC ProcName 10, 'example'
```
2. **输出参数**(OUT或OUTPUT参数):允许存储过程修改并返回给调用者的数据。这类参数需要在调用时声明变量来接收结果:
```sql
CREATE PROCEDURE ProcName @outputParam INT OUTPUT
AS
SET @outputParam = 42
RETURN
```
调用时:
```sql
DECLARE @result INT
EXEC ProcName @result OUTPUT
SELECT @result; -- 输出42
```
3. **返回值**:存储过程可以直接返回一个值,不需要显式指定参数。这通常用于单值操作:
```sql
CREATE PROCEDURE ProcName RETURN INT
AS
BEGIN
RETURN 123
END
```
调用并获取结果:
```sql
SELECT ProcName();
```
4. **表值参数**(Table-Type Parameter):如果需要传递一系列相关的数据,可以使用定义的表类型作为参数:
```sql
CREATE TYPE MyTableType AS TABLE (col1 INT);
CREATE PROCEDURE ProcName (@tableInput MyTableType READONLY)
AS
BEGIN
-- 对@tableInput 中的每一行进行处理
END
```
调用时将数据插入临时表再传递:
```sql
DECLARE @myTableMyTableType AS MyTableType;
INSERT INTO @myTableMyTableType VALUES (1), (2);
EXEC ProcName @myTableMyTableType;
```
阅读全文