動的SQLを生成して関数の値を変数に代入しようとしています。私は動的SQLで関数から返された値を代入する
Select @[email protected]_Dept
from dbo.WorkHistory(@today,@EID)
関数は日付を返すようなSQLの何かを生成しようとしています、私は@StartDateに割り当てる必要があります(@EID_deptは、関数によって返される列の名前になります)。 @EID_Deptは@EIDと@deptを連結して生成されます。私は手動で私のコードは以下の通りです
Select @StartDate = amaan_IT
from dbo.WorkHistory('2016-10-10', amaan)
として、それが表示されますSQLを記述する場合
は:
DECLARE @EID varchar(5), @StartDate VARCHAR(MAX),
@today DATETIME, @dept VARCHAR(10), @EID_dept varchar(20);
Select @today = SYSDATETIME()
Select @dept = dept from dbo.Dept(@EID)
Select @EID_Dept = CONCAT(@EID, @dept)
DECLARE @SQL Varchar(max);
SET @SQL = N'Select @StartDate = @EID_Dept
from dbo.PeriodHistory(@today, @EID)';
EXEC Sp_executesql
@SQL,
N'@StartDate VARCHAR(MAX) out,@EID_dept varchar(max),@today datetime,@EID Varchar',
@StartDate out,
@[email protected]_Dept,
@[email protected]
なぜ動的SQLをまったく使用していますか?これをもっと難しくする以外は何もしません。 –
変数を使用してオブジェクト名を割り当てることはできません。SET @SQL = CONCAT(N'SELECT @StartDate = '、@EID_Dept、FROM dbo.PeriodHistory(@Today、@EID);)を使用する必要があります。しかしこれは理想からは遠く離れているようですが、あなたがこれを最善の方法でやっているとは確信していません。 – GarethD
EIDが変更され、関数からデータを取得するためにEID n Deptを連結する必要があります。ちょうどEIDが渡され、EIDを使ってDeptを見つけて両方を連結する必要があります。 –