如何在获取变量后执行存储在表中的表达式

时间:2014-12-29 18:35:28

标签: sql sql-server tsql

我有一个使用getdate()函数存储日期的表。 例如

convert(char(7),dateadd(day,-28,GETDATE()), 120)  + '-01'

我已经构建了一个存储过程,我从表中获取数据

DECLARE kursor SCROLL CURSOR FOR 
    SELECT file_name_date_from, file_name_date_to
                FROM [dbo].[table]
                ORDER BY id
                OPEN kursor;
FETCH NEXT FROM kursor INTO @f_name_date_from, @f_name_date_to;
    WHILE @@FETCH_STATUS = 0

问题在于,当我尝试

execute sp_executesql N'select @data', N'@data varchar(200)', @data = @f_name_date_from;

我得到了从表格中获取的内容,但我希望得到计算日期。

问题是如何根据提取的表达式设置变量@f_name_date_from和@f_name_date_to计算值。

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT cast(file_name_date_from as date), cast(file_name_date_to as date)
FROM [dbo].[table]
ORDER BY id

为什么让它变得复杂呢?

答案 1 :(得分:0)

我找到了解决方案。下面的工作代码示例:

DECLARE
      @SQLString            NVARCHAR(200)
     ,@ParmDefinition       NVARCHAR(200)
     ,@f_name_date_to_out VARCHAR(30)
     ,@f_name_date_to VARCHAR (100) = 'convert(char(10),dateadd(day,-28,GETDATE()),120)' -- apostrophes are important here, because after fetching data from table they always appear in variable.
     ,@data_do VARCHAR (30)



SET @SQLString = N'SELECT @DataOUT ='+ @f_name_date_to
        SET @ParmDefinition = '@DataOUT varchar(100) OUTPUT'
        EXECUTE sp_executesql
                    @SQLString,
                    @ParmDefinition,
                    @DataOUT=@f_name_date_to_out OUTPUT
                    SET @data_do = @f_name_date_to_out;

SELECT @data_do

感谢您的帮助:)