I am using a dynamic query wherein I want to use the variable which holds the datetime, whenever I execute the query it says cannot convert datetime from string, when I cast tha
You should not concatenate your parameter values like this. The best solution is to use a parameterized query with sp_executesql.
DECLARE @sql nvarchar(4000)
select @sql = N'
SELECT B.FacId
, B.FacName
, B.BookCode
, B.BookName
, B.Quantity
, CONVERT(VARCHAR(10), B.TillDate, 104) AS TILLDATE
FROM ' + quotename(@TABLE) + N' B
WHERE B.TillDate BETWEEN cast(floor(cast(@fromDate as float)) as datetime)
AND cast(floor(cast(@toDate as float)) as datetime)'
EXEC sp_executesql @sql, N'@fromDate datetime, @toDate datetime', @FROMDATE, @TODATE
Things to note about sp_executesql are:
NVARCHAR
valuesSome additional changes were applied to the query:
QUOTENAME()
function which protects against sql injection on the object nameconvert(,,101)
is an expensive operation which can better be done using the casting to float and taking floor of that value.