我有一个名为FunctionValue的字符串列字段。
此字段可以包含DATEADD(datepart, number, date)
或GETDATE()
,也可以包含其他内容。
例如,如果是DATEADD(year, 3, GETDATE())
我希望稍后在SP运行时期间执行此操作,并将值保存在名为@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
我不确定我需要把它放在那里以便无论价值如何,DATEADD
函数的结果都会被返回并保存在@FunctionValue
中。
答案 0 :(得分:2)
单向;
--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
预先需要这种类型,或者你可以做一些丑陋的事情,比如显式地转换为sql_variant。
答案 1 :(得分:0)
试试这个 -
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