SQL Fonction enregistrée dans le champ – comment exécuter DATEADD ()?

J'ai un champ de colonne de string nommé FunctionValue. Ce champ peut contenir DATEADD(datepart, number, date) ou GETDATE() ou autre chose.

Si par exemple c'est DATEADD(year, 3, GETDATE()) je veux que ceci soit exécuté plus tard pendant une exécution SP et la valeur enregistrée dans une variable appelée @FunctionValue .

 SET @FunctionValue = ( SELECT CASE WHEN FunctionValue LIKE 'DATEADD%' THEN --??? WHEN FunctionValue LIKE 'GETDATE' THEN CAST(GETDATE() AS nvarchar(255)) ELSE FunctionValue END AS FV FROM @TSV_WithTarget 

Je ne suis pas sûr de ce que je devrais mettre là pour que la valeur de la fonction DATEADD soit renvoyée et enregistrée dans @FunctionValue .

Une manière;

 --modify field or add an assignment declare @sql nvarchar(128) = 'set @result = ' + 'DATEADD(year, 3, GETDATE())' declare @FunctionValue datetime exec sp_executesql @sql, N'@result datetime output', @FunctionValue output select @FunctionValue 

Le type est nécessaire à l'avance, ou vous pourriez faire quelque chose de moche comme explicitement la conversion en sql_variant.

Essaye celui-là –

 DECLARE @FunctionValue NVARCHAR(500) SELECT @FunctionValue = 'SELECT ' + ( SELECT CASE WHEN FunctionValue LIKE 'DATEADD%' THEN 'DATEADD(year, 3, GETDATE())' WHEN FunctionValue LIKE 'GETDATE' THEN 'GETDATE()' ELSE FunctionValue END FROM @TSV_WithTarget ) EXEC sp_executesql @FunctionValue