2016-11-03 16 views
0

我是SQL新手,尝试从函数返回的值中将值赋给变量,但我无法获取该值。使用字符串从函数中检索列

我的查询是:

DECLARE @StartDate DATETIME,@ReferenceDateString VARCHAR(10)='Q1_CY' ; 

Select @[email protected] from dbo.Dates(GETDATE()); 

当我运行上面的查询我只是得到assgined到@StartDate而不是从功能的实际值的值Q1_CY

如果我不希望使用一个变量,然后我的查询是这样的:

Select @StartDate=Q1_CY from dbo.Dates(GETDATE()); 

有没有办法做到这一点?

+0

你可以试试'SET @StartDate =选择....'。 – FDavidov

+0

您需要使用动态SQL来执行此操作。如果您正在学习SQL,请跳过这一步并继续其他工作,直到您更熟悉该语言为止。 –

+0

@GordonLinoff您可以发布动态SQL,以便我可以理解并尝试它,因为我完全不是SQL的新手,而是动态SQL的新手。 –

回答

0

它是动态SQL相当麻烦,因为你需要一个输出参数:

declare @StartDate DATETIME, 
     @ReferenceDateString VARCHAR(10)='Q1_CY' ; 
declare @sql nvarchar(max); 

set @sql = 'Select @StartDate = @ReferenceDateString from dbo.Dates(GETDATE())'; 

set @sql = replace(@sql, '@ReferenceDateString', @ReferenceDateString); 

exec sp_executesql @sql, N'@StartDate datetime output', @[email protected];