Sql 用字符串连接datetime

Sql 用字符串连接datetime,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,尝试连接日期和字符串时出错 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(@select+@where) 我也试着像下面这样做,但没有成功: declare @to

尝试连接日期和字符串时出错

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(@select+@where)
我也试着像下面这样做,但没有成功:

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

试试这样的

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(@select+@where)
或者更好的选择是这样的

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

@sanmah,你也需要答案建议的引号来获得正确的结果,不是吗?@ala,当我用cast语句连接where时,没有引号也可以很好地工作。。。