sql - 将选择结果作为存储过程的参数传递

标签 sql sql-server select stored-procedures parameters

我有一个带有以下参数的 T-SQL 存储过程

CREATE PROCEDURE [dbo].[SaveData]
-- Add the parameters for the stored procedure here
    @UserID varchar(50),
    @ServiceID varchar(50),
    @param1 varchar(50),
    @param2 varchar(50),
    @endDate datetime
AS BEGIN
    . 
    .
    -- my code --

我想知道是否可以将 select 的结果作为参数传递:

    exec SaveDate (SELECT player.UserID,player.ServiceID, 'no','no',GETDATE()
           FROM player)

我尝试过类似的方法,但不起作用。

最佳答案

1.一种方法是:
a) 声明你的变量
b) 使用单个 select 语句为它们赋值
c) 执行传递局部变量的过程
d) 使用 WHILE 或 CURSOR 在循环中执行以下命令,以便将其应用于 TABLE1 中的所有行

DECLARE @param1 <DATATYPE>, @param2 <DATATYPE>, ...

SELECT TOP 1 @param1 = col1,    @param2 = col2, ...
FROM TABLE1
WHERE <where_clause>

EXEC SaveDate @param1, @param2, ...

2.另一种方法是定义自己的表类型,填充它,然后将其传递给过程。然而,这需要对您的存储过程进行一些更改(在参数列表中,您的自定义类型后面应该跟有READONLY):

CREATE TYPE [dbo].[TYPENAME] AS TABLE(
    [ID] [int] NOT NULL,
    ...
)
GO

DECLARE @myTypeVar TYPENAME;

INSERT @myTypeVar
SELECT col1, col2, ...
FROM TABLE1

EXEC SaveData @myTypeVar

关于sql - 将选择结果作为存储过程的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099913/

相关文章:

mysql - 使用 SQL 中的数学进行级联更新

sql - 如何为相同的项目添加相同的数字?

sql - 如何更正此 T-SQL 语法以获得没有小数位的输出?

mysql - 如果mysql中其他行存在相同的数据,则显示空白值

javascript - 将 <select> 下拉菜单变成更高级的 JQuery 插件是什么?

javascript - Html 'Select' 控件始终将 h 选定索引返回为 0

SQL 表值函数

mysql - 如果左侧存在某些内容,则返回左侧表和右侧表中的所有结果

c# - "LINQ to Entities", "LINQ to SQL"和 "LINQ to Dataset"有什么区别

sql - 根据子查询中的值更新查询