我有一个带有以下参数的 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/