首页 > 解决方案 > 在 Exec 存储过程命令 SQL Server 中使用表列

问题描述

我有一个命令:

exec [Database].[dbo].DepartmentChangeLevel , Department, Date, Level;

我目前手动明确地指定值,如下所示:

 exec [Database].[dbo].DepartmentChangeLevel , 'Catering', '20180101 08:01:00', 3;

但是,我想运行相同的命令并使用表中的值 - 如下所示:

exec [Database].[dbo].DepartmentChangeLevel 
     select 
         [Department], [Date], [Level]
     from
         [Database].[dbo].[DepartmentChange] 

我得到的错误信息是

期望未提供的参数@department

请帮忙

标签: sqlsql-server

解决方案


您可以改用光标:

在您的表上创建一个 Cursor 并将所有三列传递给三个变量并在游标中执行 proc。

例子 :

    declare db_cursor cursor 

    for select 
             [Department], [Date], [Level]
         from
             [Database].[dbo].[DepartmentChange];

    declare @department int --your column data type
            ,@date datetime --your column data type
            ,@level varchar(10) --your column data type

    OPEN db_cursor;

    FETCH NEXT FROM db_cursor INTO @department, @date, @level;

    WHILE @@FETCH_STATUS = 0  

    BEGIN  
        exec [Database].[dbo].DepartmentChangeLevel @department, @date, @level;
        DELETE FROM [Database].[dbo].DepartmentChangeLevel ---or you can store values from DepartmentChangeLevel table into temporary table  then delete those values from temporary table
            WHERE [Department]=@department
            and [Date]=@date
            and [Level]=@level

    FETCH NEXT FROM db_cursor INTO @department,@date, @level

    END

    CLOSE db_cursor;
    DEALLOCATE db_cursor;

推荐阅读