J'ai le contenu de la table comme le montre cette image:Comment calculer les valeurs d'une colonne de formules, les variables de formule étant des colonnes de la même SQL Server Table
La colonne de formule contient la les noms de colonne en tant que variables dans l'expression de formule.
Je suis en train d'obtenir un score de colonne calculée correspondant à chaque emp_id
, Tsk_id
et processed date
qui serait calculé dynamiquement en fonction des formules données dans la colonne de la formule et le pousser à une table temporaire
J'ai essayé de l'atteindre par SQL dynamique dans un curseur en utilisant le code ci-dessous qui a réussi. Quelqu'un peut-il suggérer une meilleure façon de le faire, peut-être en utilisant un CTE ou quelque chose?
DECLARE @EMP_ID nVARCHAR(255)
DECLARE @TSK_ID nVARCHAR(255)
DECLARE @PROCESSEDDATE nVARCHAR(255)
DECLARE @SQLCMD nVARCHAR(max)
DECLARE @SQLTEXT nvarchar(max)
DECLARE db_cursor CURSOR FOR
SELECT EMP_ID,TSK_ID,PROCESSEDDATE from dbo.[Formula_Cal] group by EMP_ID,TSK_ID,PROCESSEDDATE
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @EMP_ID,@TSK_ID,@PROCESSEDDATE
WHILE @@FETCH_STATUS = 0
BEGIN
Set @SQLTEXT = (Select formula from dbo.[Formula_Cal] where [email protected]_ID and TSK_ID [email protected]_ID and [email protected])
Set @SQLCMD ='select emp_id,TSK_ID,convert(decimal(18,2),(' [email protected]+ ')) As Score FROM [Formula_Cal] where TSK_ID = '[email protected]_ID+' and EMP_ID = '[email protected]_ID
--Select @SQLTEXT
--Select @SQLCMD
insert into dbo.TMP_ACHSCR(emp_id,TSK_id,Score)
Exec sp_executesql @SQLCMD
FETCH NEXT FROM db_cursor INTO @EMP_ID,@TSK_ID,@PROCESSEDDATE
END
CLOSE db_cursor
DEALLOCATE db_cursor
codereview.stackexchange.com – scsimon
Je ne vois pas vraiment le besoin d'un curseur ici. Vous pouvez simplement sélectionner tout cela dans une requête SQL dynamique, non? –