OpenQuery与函数/过程中的参数

时间:2017-03-28 07:33:21

标签: sql-server

我有一个使用标准查询和打开查询的函数。

    CREATE function [dbo].[udf_funcForAll](@DateFrom datetime, @DateTo datetime, @param smallint)
returns table
as
return (
    select * from  [dbo].[udf_func] ('2016-10-01','2017-03-15',0) 
    union all 
    select * from  openquery(l1,'select * from [dbo].[udf_func] (''2016-10-01'',''2017-03-15'',''0'')') 
    union all 
    select * from  openquery(l1,'select * from [dbo].[udf_func] (''2016-10-01'',''2017-03-15'',''0'')') 
    union all 
    select * from  openquery(l2,'select * from [dbo].[udf_func] (''2016-10-01'',''2017-03-15'',''0'')')

我想在我的查询中使用我的参数@ DateFrom,@ DateTo和@param。

当我尝试使用以下查询创建过程时,我收到错误:"从字符串转换日期和/或时间时转换失败。 "

declare @DateFrom DateTime = '2016-10-01'
declare @param int = 1


declare @sqlquery nvarchar(max) = 'select * from  [dbo].[udf_func] ('''+@DateFrom+''',''2017-03-15'','+@param+')'

如何将查询中的dateTime作为变量传递?

1 个答案:

答案 0 :(得分:0)

您必须在nvarchar中转换all或将其转换为nvarchar。 sql不能+多种数据类型。以此为例:

    declare @DateFrom NVARCHAR(100) = '2016-10-01'
    declare @param NVARCHAR(100) = 1

    DECLARE @sqlquery nvarchar(max) = 'select * from  [dbo].[udf_func] ('''+@DateFrom+''',''2017-03-15'', '+@param+')'