繁体   English   中英

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

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

从字符串转换日期时间时转换失败。

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

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

所以简单地做到这一点。 连接字符串时,请始终给空格。

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,还需要在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转换为datetime。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM