MSSQL-OPENROWSET,在动态查询中传递日期

时间:2014-02-04 16:20:28

标签: sql-server

这应该不会那么难,但我似乎无法找到我出错的地方。以下给出了语法错误(非常非描述性错误)。我这样做的原因是我最终想用变量中的值替换日期。

非常感谢第二(或第三)组眼睛。

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

1 个答案:

答案 0 :(得分:0)

好的,这是一个可怕的工作,但它至少在一个紧张的工作。我通过日期的数字然后检查程序方面,以确定使用哪一个。我在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