【问题标题】:SQL Sub-query parameters from ExcelExcel 中的 SQL 子查询参数
【发布时间】:2019-09-09 05:10:31
【问题描述】:

我有一个带有子查询的 SQL 查询,我想从 Excel 工作表中的单元格分配子查询参数,因为此查询无法以图形方式表示 Excel 不断抛出错误:

[Microsoft][ODBC SQL Server Driver] 无效的参数号和 [Microsoft][ODBC SQL Server Driver] 无效的描述符索引

我已经尝试过这里提到的解决方案来欺骗 excel 而没有成功Using Parameters in SQL query with sub-query

 ;WITH dataset_bl as (
SELECT 
--rank() over (partition by date_of_AC, ac_room order by  into_theatre) as OrderNumber
--,datetime_of_AC as booking_datetime
date_of_AC
,AC_room
,specialty
,OAMRN
,substring(Subject_NAME,1,CHARINDEX(' ',Subject_NAME,1)) as 'surname'
,substring(Subject_NAME,CHARINDEX(' ',Subject_NAME,1)+2,500) as 'forename'
,convert(date,[dttm_of_birth],103) as DOB
,PRIN_SO as 'surg'
,'"'+ASST_SO_1+' '+ASST_SO_2+'"' as 'assistant_SO'
,substring(CONSULT_NAME,1,abs(CHARINDEX(',',CONSULT_NAME,1)-1)) as 'consult_surname'
,substring(CONSULT_NAME,CHARINDEX(' ',CONSULT_NAME,1)+1,500) as 'consult_first_name'
,'"'+actual_AC+'"' as AC_details   
,'"'+PLANNED_PROD+'"' as booked_details
,'Carried Out' as 'TT_outcome'
, 'NULL' as  'unP_return_flag'
,OP_type
--,LOS
,case when CL_PRIORITY ='' then 'Not listed' else 'isted' end as islisted
,CLI_PRIORITY as listed_priority
,case when EM_PRIORITY like '<=%' then 'Submitted' else 'No Greensheet' end as isGreensheet
,em_priority as a, case when EM_PRIORITY like '<=%' and em_priority <>  '<=72hrsCannot charge before prod'then LEFT(EM_PRIORITY, abs(charindex('-',EM_PRIORITY)-1))  
 when em_priority = '<=72hrsCannot diso before prod' then '<=72hrs' else 'NULL' end as em_priority


FROM sample.dbo.tb_Fnl_Sur_th4 WITH (NOLOCK)
**WHERE main_ident = 'A224'  and  convert(date,into_Start, 103) >= '2019-07-01' and convert(date,into_Start, 103) <= '2019-07-31'** --i am trying to get these parameters from excel cell value
)
SELECT * FROM dataset_bl
WHERE specialty like 'abc%'
or (consult_surname like '%abc%' and consult_first_name like '%def%' )
    or surg in ('cde,fghi',
'jkl,'mnop,
'qrs,Tuv')


order by convert(date,date_of_procedure,103), operating_room--, into_theatre

【问题讨论】:

  • 您收到的错误信息是什么?
  • @metal 我得到“[Microsoft][ODBC SQL Server Driver] 无效的参数号和 [Microsoft][ODBC SQL Server Driver] 无效的描述符索引。”
  • 当我在查询中使用参数时(不在子查询中)它工作得很好
  • 你能给出完整的查询吗?包括子查询?
  • 完整查询是史诗般的,但如果有帮助,我会编辑(出于安全原因)并发布

标签: sql sql-server excel


【解决方案1】:

这里有一些建议。

首先是检查日期列的格式。

并将您的参数构建为像

Cast(into_Start as smalldatetime) between ? and ?

【讨论】:

  • 返回错误“无法以图形方式显示的查询中不允许使用参数”
  • 这个 Cast(into_Start as smalldatetime) 之间怎么样?和?
  • 查看其他具有类似问题的问题.. 很少有人通过将查询转换为视图然后通过 Excel 使用参数查询视图来克服这个问题,但因为我无权创建新视图不是我可以尝试的选项,我认为这不会太难
  • 试过 Cast(into_Start as smalldatetime) 之间?和 ?/ 也试过 >=
【解决方案2】:

我也遇到过同样的问题,似乎找到了适合我的解决方案。实际上,当您有直接查询时,Excel 中 MSQUERY 中使用的参数 [?] 通常会起作用 例如:

Select [YourTable].[Column]
From   [YourTable]
Where  [YourTable].[Column]= ?

Excel 参数将提示并触发询问您希望该参数填充哪个单元格或数据的窗口。

另一方面,如果您使用子查询并使用 Parameter 添加 Where 条件?会卡在参数 [Microsoft][ODBC SQL Server Driver] Invalid parameter number 和 [Microsoft][ODBC SQL Server Driver] Invalid Descriptor Index

如果您在此处下载 SQL Server 的 ODBC 驱动程序 --> https://www.microsoft.com/fr-fr/download/details.aspx?id=56567

安装它并确保用于 Excel 中 MSQUERY 的 ODBC 使用该连接。 ODBC Data Source to use

在此之后,我可以使用类似这样的参数在 Excel 中使用 MSQuery

Select [RenamedTable].*
From  (Select         [YourTable].[Column1],
                      [YourTable].[Column2],
                      [YourTable].[Column3]
       From           [YourTable]) as RenamedTable
Where  [RenamedTable].[Column1] between ? and ?

希望这对你和我一样有用,因为我在日期参数之间遇到了类似的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多