Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008 R2中的动态查询?_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server 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 当我执行此查询时,我得到一个错误: 从字符串转换日期时间时

在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
当我执行此查询时,我得到一个错误:

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


使用此固定日期格式,您也要传递
日期
而不是
@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,我已编辑了答案。如果仍然显示相同的错误,请提供您在函数中编写的内容,并让我们知道您试图实现的目标。