SQL Server 2008 R2 中的动态查询?
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
当我执行这个查询时,出现错误:
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并且你还需要在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 转换为日期时间。
在使用动态查询时,当您定义变量(@Query
)来执行查询时,其数据类型为nvarchar
或varchar
。
因此,在传递参数时,您必须将任何值转换为 nvarchar
或 varchar
类型。
所以简单地做到这一点。连接字符串时始终给出 space。
set @Query = 'select xxx, dbo.myfunction(yyy,' + cast( date as nvarchar(50)) + ',sa) '
在 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
当我执行这个查询时,出现错误:
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并且你还需要在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 转换为日期时间。
在使用动态查询时,当您定义变量(@Query
)来执行查询时,其数据类型为nvarchar
或varchar
。
因此,在传递参数时,您必须将任何值转换为 nvarchar
或 varchar
类型。
所以简单地做到这一点。连接字符串时始终给出 space。
set @Query = 'select xxx, dbo.myfunction(yyy,' + cast( date as nvarchar(50)) + ',sa) '