Sql server SQL Server 2008 R2中的动态查询?
在SQL Server 2008 R2中,我尝试在动态查询中调用一个函数,参数类型为Sql server SQL Server 2008 R2中的动态查询?,sql-server,sql-server-2008-r2,Sql Server,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 当我执行此查询时,我得到一个错误: 从字符串转换日期时间时
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
当我执行此查询时,我得到一个错误:
从字符串转换日期时间时转换失败
使用此固定日期格式,您也要传递
日期
而不是@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-to-datetime 使用动态查询时,当您定义变量(
@query
)以执行查询时,其数据类型为nvarchar
或varchar
因此,在传递参数时,必须将任何值转换为nvarchar
或varchar
类型
所以就这么做吧。连接字符串时始终提供空间
set @Query = 'select xxx, dbo.myfunction(yyy,' + cast( date as nvarchar(50)) + ',sa) '
添加您的
myfunction
function从字符串转换日期时间时出现相同错误alj转换失败。您好,Datha,我已编辑了答案。如果仍然显示相同的错误,请提供您在函数中编写的内容,并让我们知道您试图实现的目标。