2

我有一个名为 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.

4

2 回答 2

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。

于 2013-04-15T12:06:16.593 回答
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
于 2013-04-15T12:03:48.343 回答