2015-06-07 3 views
2

Я получаю сообщение об ошибке при попытке конкатенации даты и строки.concatenate datetime с строкой

declare @select varchar(max) 
declare @where varchar(max) 
set @select = 'select * from tbl Emp........' 
@where = ' where Emp.date >='+ cast((cast(getdate() as date)) as varchar(20)) 
exec(@[email protected]) 

Я также пытался сделать, как показано ниже, но не получилось:

declare @today varchar(20) 
@today = cast((cast(getdate() as date)) 
@where = 'where Emp.date> =' + '@today' 

ответ

4

Попробуйте что-то вроде этого ...

declare @select varchar(max) 
declare @where varchar(max) 
set @select = 'select * from tbl Emp ' 
set @where = ' where Emp.date >= ''' + CONVERT(varchar(8),getdate(),112) + '''' 

exec(@[email protected]) 

Или еще лучше было бы что-то вроде это .....

DECLARE @Sql nvarchar(max); 
DECLARE @Date DATE = GETDATE(); 

SET @Sql = N' select * from tbl Emp ' 
     + N' where Emp.date >= @Date' 

Exec sp_executesql @Sql 
        ,N'@Date DATE' 
        ,@Date 

Но почему вы даже нужен динамический sql для этого простого запроса, почему вы не можете просто сделать

DECLARE @Date DATE = GETDATE(); 

select * from tbl Emp 
where Emp.date >= @Date 
+0

@sanmah, вам также нужны цитаты, предложенные ответом, чтобы получить правильные результаты, не так ли? – BICube

+0

@ala, когда я конкатенирую, где с выражением cast(), он отлично работал без кавычек ... – sanmah

Смежные вопросы