[英]Dynamic query in SQL Server 2008 R2?
在SQL Server 2008 R2中,我试图在动态查询中使用varchar
和datetime
类型的参数调用函数。
我的查询如下所示:
declare @Query nvarchar(max)
declare @date datetime
set @date ='02/02/2015'
set @Query = 'select xxx, dbo.myfunction(yyy,'+date +',sa) '
exec @Query
当我执行此查询时,出现错误:
从字符串转换日期时间时转换失败。
在使用动态查询时,在定义变量( @Query
)以执行查询时,其数据类型为nvarchar
或varchar
。
因此,在传递参数时,必须将任何值转换为nvarchar
或varchar
类型。
所以简单地做到这一点。 连接字符串时,请始终给空格。
set @Query = 'select xxx, dbo.myfunction(yyy,' + cast( date as nvarchar(50)) + ',sa) '
使用这种不变的日期格式,您也可以通过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,还需要在yyy
和sa
周围添加引号:
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转换为datetime。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.