SQL Server 2008 R2 中的动态查询?

Dynamic query in SQL Server 2008 R2?

在 SQL Server 2008 R2 中,我试图在动态查询中调用函数,参数类型为 varchardatetime

我的查询如下所示:

declare @Query nvarchar(max)
declare @date datetime

set @date ='02/02/2015'
set @Query = 'select xxx, dbo.myfunction(yyy,'+date +',sa) '

exec @Query

当我执行这个查询时,出现错误:

Conversion failed when converting datetime from character string.

使用这种不变的日期格式,同时你传递的是 date 而不是 @date:

DECLARE @Query NVARCHAR(MAX)
DECLARE @date DATETIME

SET @date = '20150202'
SET @Query = 'select xxx, dbo.myfunction(yyy,''' + CONVERT(NVARCHAR(8), @date, 112) + ''',sa) '

PRINT @Query

但是你可以直接声明@date为varchar并且你还需要在yyysa两边加上引号:

DECLARE @Query NVARCHAR(MAX)
DECLARE @date NVARCHAR(8) = '20150202'

SET @Query = 'select xxx, dbo.myfunction(''yyy'',''' + @date + ''',''sa'') '

PRINT @Query

试试这一行:

set @Query = 'select xxx, dbo.myfunction(yyy,'''+date +''',sa) '

这样,日期就被引用了。另外,@date 最好声明为字符串。

试试这个,

declare @Query nvarchar(max)
declare @date datetime

set @date ='02/02/2015'
set @Query = 'select xxx, dbo.myfunction(''yyy'','''+CAST(@date as nvarchar) +''',''sa'')'

EXECUTE sp_executesql @Query 

您可以在您的函数中将@date 转换为日期时间。

在使用动态查询时,当您定义变量(@Query)来执行查询时,其数据类型为nvarcharvarchar

因此,在传递参数时,您必须将任何值转换为 nvarcharvarchar 类型。

所以简单地做到这一点。连接字符串时始终给出 space。

set @Query = 'select xxx, dbo.myfunction(yyy,' + cast( date as nvarchar(50)) + ',sa) '