これは私のストアドプロシージャです。基本的にスタッフIDであるINTを入力とみなします。は、ストアドプロシージャにパラメータとしてループを渡します。
CREATE PROCEDURE [dbo].[spMonthlyPayroll]
@StaffId int
AS
BEGIN
SET NOCOUNT ON;
SELECT StaffId, Name, CNICNumber, Salary, BankAccountNumber,[dbo].[totalWorkingDaysScalar](StaffId, datename(month, GETDATE())) as TotalDaysWorked, [dbo].[totalDaysWorkedScalar](StaffId, datename(month, GETDATE())) as TotalDaysWorked,
(CONVERT([date],getdate())) AS PayrollDate,
(CONVERT([date],dateadd(month,(-1),dateadd(month,datediff(month,(0),getdate())+(1),(0))))) AS PayrollFrom,
(CONVERT([date],dateadd(day,(-1),dateadd(month,datediff(month,(0),getdate())+(1),(0))))) AS PayrollTo,
(datename(month,getdate())) + ', ' + (datename(year,getdate())) AS PayrollPeriod,
(Salary/[dbo].[totalWorkingDaysScalar](StaffId, datename(month,getdate()))) * [dbo].[totalDaysWorkedScalar](StaffId, datename(month,getdate())) as GrossSalary,
.10 as IncomeTaxFactor,
((Salary/[dbo].[totalWorkingDaysScalar](StaffId, datename(month,getdate()))) * [dbo].[totalDaysWorkedScalar](StaffId, datename(month,getdate()))) - ((Salary/[dbo].[totalWorkingDaysScalar](StaffId, datename(month,getdate()))) * [dbo].[totalDaysWorkedScalar](StaffId, datename(month,getdate())) * (.10)) as TotalNetSalary
FROM Staff
where [email protected]
END
GO
入力を手動で入力する必要はありません。私はスタッフテーブルからすべての既存のスタッフIDを取り出すことを、staffIdが依然として唯一のパラメタであることと一緒に、それによって欲しいと思っています。それ、どうやったら出来るの?私はWHILEループを使ってやってみました。しかし、それ
set @StaffId = select Staff.StaffId from Staff
は助けてくださいselect
に波線を示しています。私はSQL Server 2014を使用しています。
あなたのクエリすでに区切り文字でCOMBINのmultlipleのstaffidの文字列を取得するにはvarchar型の変数にパラメータ@staffIDを変更することができますStaff.StaffIdテーブルを使用するので、テーブル全体をループしたい場合はWHERE条件を削除してください – Mihai
Sprocをテーブル値関数に変換してから、元のCROSS APPLYを行うVIEWを作成してくださいあなたのTVFのテーブル。 – Dai
うん。それはそれを愚かな疑問にする。 – fasih