Sql &引用;从字符串“转换日期和/或时间”时转换失败;论动态查询

Sql &引用;从字符串“转换日期和/或时间”时转换失败;论动态查询,sql,sql-server,Sql,Sql Server,你能告诉我什么是我的错吗。试试这个 declare @date Datetime ='',@query nvarchar(max); set @date =getdate(); set @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where [Test] >=cast(date,'+ @date +' ,103) ; ' exec sp_executesql @query 试试这个 declare @date

你能告诉我什么是我的错吗。

试试这个

declare @date Datetime ='',@query nvarchar(max);
set @date   =getdate();
set @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where  [Test] >=cast(date,'+ @date +' ,103) ; '

exec sp_executesql @query
试试这个

declare @date Datetime ='',@query nvarchar(max);
set @date   =getdate();
set @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where  [Test] >=cast(date,'+ @date +' ,103) ; '

exec sp_executesql @query

如果在动态查询中使用
datetime
类型,则需要将
date
转换为
varchar

您不能在
cast
函数中使用
style
,您需要改用
Convert
。此外,还需要在
datetime
参数周围加上额外的单引号

declare @date Datetime ='',@query nvarchar(max);
set @date   =getdate();
set @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where  [Test] >=convert(date,'+ @date +' ,103) ; '

exec sp_executesql @query

始终使用Print语句来调试动态查询如果在动态查询中使用
datetime
类型,则需要将
date
转换为
varchar

您不能在
cast
函数中使用
style
,您需要改用
Convert
。此外,还需要在
datetime
参数周围加上额外的单引号

declare @date Datetime ='',@query nvarchar(max);
set @date   =getdate();
set @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where  [Test] >=convert(date,'+ @date +' ,103) ; '

exec sp_executesql @query
始终使用打印语句来调试动态查询

声明@date-Datetime ,@query nvarchar(最大值); 设置@date=getdate()-2; 在[Test]中设置@query='select*,其中convert(varchar,Test,100)>='+''''''转换(varchar,date,100)+''' 打印(@query) exec sp_executesql@query

declare@date-Datetime ,@query nvarchar(最大值); 设置@date=getdate()-2; 在[Test]中设置@query='select*,其中convert(varchar,Test,100)>='+''''''转换(varchar,date,100)+''' 打印(@query)
exec sp_executesql@query

仅仅因为您使用的是动态查询,这并不妨碍您使用并保持所有内容的良好键入:

DECLARE @date  DATETIME ='',
        @query NVARCHAR(max);

SET @date = Getdate();
SET @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where  [Test] >=convert(date,'''
           + Cast(@date AS VARCHAR(50)) + ''' ,103) ; '

--print @query
EXEC Sp_executesql
  @query 

仅仅因为您使用的是动态查询,这并不妨碍您使用并保持所有内容的良好键入:

DECLARE @date  DATETIME ='',
        @query NVARCHAR(max);

SET @date = Getdate();
SET @query='select * from [3].[Sync_Database_BTS].dbo.[Test] where  [Test] >=convert(date,'''
           + Cast(@date AS VARCHAR(50)) + ''' ,103) ; '

--print @query
EXEC Sp_executesql
  @query 

试试这个这对我有用

declare @date Datetime ='',@query nvarchar(max),@parms nvarchar(max);
set @date   =getdate();
set @query=N'select * from [3].[Sync_Database_BTS].dbo.[Test]
             where [Test] >=cast(date,@date) ; ';
set @parms = N'@date datetime';

exec sp_executesql @query,@parms,@date
如果您使用126格式,则它是Sql Server的默认格式


试试这个这对我有用

declare @date Datetime ='',@query nvarchar(max),@parms nvarchar(max);
set @date   =getdate();
set @query=N'select * from [3].[Sync_Database_BTS].dbo.[Test]
             where [Test] >=cast(date,@date) ; ';
set @parms = N'@date datetime';

exec sp_executesql @query,@parms,@date
如果您使用126格式,则它是Sql Server的默认格式


正在工作,谢谢,但为什么我的查询不起作用?“这是什么问题?”我补充道explantion@King_Fisher,如果您觉得这个答案对您有用,请随时接受。:-)正在工作,谢谢,但为什么我的查询不起作用?“这是什么问题?”我补充道explantion@King_Fisher,如果您觉得这个答案对您有用,请随时接受。:-)你好@rajesh yadav,你能解释一下错误吗?这只是一个数据类型未匹配错误…我用varchar转换了列和值,就是这样:)不,我还想检查日期和时间,不仅仅是date@King_Fisher查看nowHi@rajesh yadav,你能解释一下错误吗?这只是一个数据类型未匹配错误…我在varchar中转换了列和值,就是这样:)不,我还想检查日期和时间,不仅仅是date@King_Fisher现在检查