2014-02-04 3 views
0

Это не должно быть так сложно, но я просто не могу найти, где я ошибаюсь. Ниже приведена синтаксическая ошибка (очень не описательная). Причина, по которой я делаю это так, заключается в том, что в конечном итоге я хочу заменить даты на значения из переменных.MSSQL-OPENROWSET, Передача дат в динамическом запросе

Был бы благодарен второй (или третий) комплект глаз.

DECLARE @sql nvarchar(1000) = 'SELECT * FROM OPENROWSET (''SQLOLEDB'',''Server=WIN- 
T7HOHROSTNT\SQLEXPRESS;TRUSTED_CONNECTION=YES;database = MyDB'', 
''SET FMTONLY OFF; SET NOCOUNT ON; EXEC [MyDB].[dbo].[GetCourseReport] 
     @Start = N''22 Jan 2014 4:00pm'', 
     @End = N''23 Jan 2014 4:00pm'', 
     @QueryTime = N''22 Jan 2014 8:00pm'', 
     @CourseSUID = 1'') AS Result' 


EXECUTE sp_executesql @stmt = @sql 

Я получаю приведенный выше код от копирования/вставки из нижеследующего запроса, который действительно работает;

SELECT * FROM OPENROWSET ('SQLOLEDB','Server=WIN-T7HOHROSTNT\SQLEXPRESS;TRUSTED_CONNECTION=YES;database = MyDB', 
'SET FMTONLY OFF; SET NOCOUNT ON; EXEC [MyDB].[dbo].[GetCourseReport] 
     @Start = N''22 Jan 2014 4:00pm'', 
     @End = N''23 Jan 2014 4:00pm'', 
     @QueryTime = N''22 Jan 2014 8:00pm'', 
     @CourseSUID = 1') AS Result 

ответ

0

Хорошо, это ужасная работа вокруг, но она по крайней мере работает в крайнем случае. Я передал даты с номерами s, затем проверил на стороне процедуры, чтобы определить, какой из них использовать. Я видел результаты поиска по датам ISO, но никогда не мог заставить его работать. Если кто-то еще найдет что-то для работы, я хотел бы узнать об этом.

DECLARE @startTime DATETIME = CONVERT(DATETIME, '01-22-2014 4:00pm'); 
DECLARE @endTime DATETIME = CONVERT(DATETIME, '01-23-2014 4:00pm'); 
DECLARE @queryTime DATETIME = CONVERT(DATETIME, '01-23-2014 2:00am'); 

DECLARE @sql nvarchar(1000) = N'SELECT * FROM OPENROWSET (''SQLOLEDB'',''Server=WIN-T7HOHROSTNT\SQLEXPRESS;TRUSTED_CONNECTION=YES;database = MyDB'', 
''SET FMTONLY OFF; SET NOCOUNT ON; EXEC [MyDB].[dbo].[GetCourseReport] 
    @Start = NULL, 
    @End = NULL, 
    @QueryTime = NULL, 
     @CourseSUID = NULL, 
    @StartAsNumber = ' + CONVERT(VARCHAR(20),CONVERT(DECIMAL(18,10), @startTime)) + ', 
    @EndAsNumber = ' + CONVERT(VARCHAR(20),CONVERT(DECIMAL(18,10), @endTime)) + ', 
    @QueryAsNumber = ' + CONVERT(VARCHAR(20),CONVERT(DECIMAL(18,10), @queryTime)) + '  
    '')' 


PRINT @sql 

EXECUTE sp_executesql @sql 
Смежные вопросы