3

当我尝试在我的 SQL 语句中使用动态查询代码时

Declare @Start datetimeoffset;
Declare @End datetimeoffset;
Declare @SqlCommand nvarchar(Max);

Set @Start = '2013-05-17 10:00:04.500 +00:00';
Set @End = '2013-09-17 10:00:04.500 +00:00'
Set @SqlCommand = 'Select * from Test where TimeLine > '+ @Start+' AND TimeLine < '+@End

Exec(@SqlCommand)

我收到以下消息说

消息 402,级别 16,状态 1,第 8 行
数据类型 varchar 和 datetimeoffset 在 add 运算符中不兼容。

请指导我正确的用法。

4

2 回答 2

5

您需要将 DateTimeOffset 值转换为 varchars。此外,您缺少额外的引号。

就像是

Declare @Start datetimeoffset = '2013-05-17 10:00:04.500 +00:00'
Declare @End datetimeoffset = '2013-09-17 10:00:04.500 +00:00'
Declare @SqlCommand nvarchar(Max)

Set @SqlCommand = 'Select * from Test where SampleTime > '''+ CAST(@Start AS VARCHAR(50))+''' AND SampleTime < '''+CAST(@End AS VARCHAR(50)) + ''''

SELECT @SqlCommand

SQL 小提琴演示

于 2013-09-13T09:15:53.623 回答
1

您应该添加''如下并@Start / @End转换为 varchar

Declare @Start datetimeoffset;
Declare @End datetimeoffset;
Declare @SqlCommand nvarchar(Max);

Set @Start = '2013-05-17 10:00:04.500 +00:00';
Set @End = '2013-09-17 10:00:04.500 +00:00'
Set @SqlCommand = 'Select * from Test where SampleTime > '''+ cast(@Start as varchar(100))+''' AND SampleTime < '''+cast(@End as varchar(100))+''' '

Exec(@SqlCommand)
于 2013-09-13T09:11:14.267 回答