Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将select语句的结果作为参数传递给存储过程_Sql Server_Loops_Stored Procedures - Fatal编程技术网

Sql server 将select语句的结果作为参数传递给存储过程

Sql server 将select语句的结果作为参数传递给存储过程,sql-server,loops,stored-procedures,Sql Server,Loops,Stored Procedures,我有一个存储过程,它执行各种检查并向多个表插入值 ALTER PROCEDURE [dbo].[storedprocedurename] @Parameter1 uniqueidentifier, @Parameter2 datetime2, @Parameter3 bit, @Parameter4 varchar(max) AS BEGIN IF @Parameter IS NULL THEN BEGIN INSERT

我有一个存储过程,它执行各种检查并向多个表插入值

ALTER PROCEDURE [dbo].[storedprocedurename] 
    @Parameter1 uniqueidentifier,
    @Parameter2 datetime2,
    @Parameter3 bit,
    @Parameter4 varchar(max)
AS
BEGIN
    IF @Parameter IS NULL
    THEN
    BEGIN
        INSERT INTO 
我还有一个select语句,返回大约600行

SELECT 
    column1, column2, column3, column4 
FROM
    Table1
输出:

         Column1              Column2         Column3          Column 4
-------------------------------------------------------------------------
1        ared-234w-5yhe       12/07/2020         0             Table       
2        fjed-reds-sdfg       10/10/1989         1             Chair      
3        fgsv-34yg-jtut       1/4/1965           1             Computer 
我基本上希望我的存储过程从select语句中获取值,将它们作为参数输入并执行。基本上,它将运行大约600次或基于select的行数

EXEC [dbo].[storedprocedurename] 'ared-234w-5yhe', '12/07/2020', 0, 'Table'
EXEC [dbo].[storedprocedurename] 'fjed-reds-sdfg', '10/10/1989', 1, 'Chair'

我该怎么做?我使用的是SQL Server,straighforward选项是使用:

然而,通常可以发现基于集合的替代方法比过程的方法更适合SQL

在这种情况下,您将把存储过程放在一边,并且参数的所有逻辑都应该基于。例如,对于共享的存储过程,它可能是这样的:

INSERT INTO dbo.Table2
    SELECT NEWID(), column2, column3, column4
    FROM dbo.Table1 AS T1
    WHERE T1.column1 IS NULL

我猜你在想一个更复杂的逻辑,所以,如果你想分享,我们可以看一下,告诉你如何转换它。有时容易,有时不容易,结果不容易理解。在这种情况下,您应该评估每种方法的优缺点。

Erland对此进行了很好的讨论。接着他对@DDLearn的讨论——这个答案对你有帮助吗?
INSERT INTO dbo.Table2
    SELECT NEWID(), column2, column3, column4
    FROM dbo.Table1 AS T1
    WHERE T1.column1 IS NULL