gpt4 book ai didi

无法在 MS Access 2010 中导入 SQL 查询

转载 作者:行者123 更新时间:2023-12-03 00:21:53 25 4
gpt4 key购买 nike

我有一个 SQL 中的 dbo 表,其中有一列,我需要根据分隔符 (,) 将其拆分为多个列。实现此目的的代码位于本问题的末尾。该代码作为查询工作得很好,但是我想在 MS Access 2010 中导入最终表(因此在拆分之后)。那就是出了问题,因为我无法使用 ODBC 或查询文件找到该表。另外,由于“声明”函数,我无法将此代码放入 View 函数中。代码来自(它还显示了我想用我的代码做什么): https://raresql.com/2015/08/22/sql-server-how-to-split-one-column-into-multiple-columns/

你能帮我解决这个问题吗?

要将 1 列拆分为多列,请使用以下代码:

DECLARE @delimiter VARCHAR(50)
SET @delimiter=', '

;WITH CTE AS
(
SELECT [Tour number],
[TISLOT Time slot begin],
[TISLOT Delivery day],
[Gate],
CAST('<M>' + REPLACE([Gate], @delimiter , '</M><M>') + '</M>' AS XML) AS [Gate XML]
FROM dbo.TISLOT
)

SELECT [Tour number],
[TISLOT Time slot begin],
[TISLOT Delivery day],
[Gate],
[Gate XML].value('/M[1]', 'varchar(50)') As [Gate1],
[Gate XML].value('/M[2]', 'varchar(50)') As [Gate2],
[Gate XML].value('/M[3]', 'varchar(50)') As [Gate3],
[Gate XML].value('/M[4]', 'varchar(50)') As [Gate4],
[Gate XML].value('/M[5]', 'varchar(50)') As [Gate5],
[Gate XML].value('/M[6]', 'varchar(50)') As [Gate6],
[Gate XML].value('/M[7]', 'varchar(50)') As [Gate7],
[Gate XML].value('/M[8]', 'varchar(50)') As [Gate8],
[Gate XML].value('/M[9]', 'varchar(50)') As [Gate9],
[Gate XML].value('/M[10]', 'varchar(50)') As [Gate10]
FROM CTE
GO

提前谢谢

最佳答案

考虑 MS Access 中的两个特殊查询对象(均在功能区上可用):

  1. 允许您保留 SQL Server 的直通查询连接后端的语法,但从 MS Access 内部运行;这将需要在创建时指定 ODBC/OLEDB 设置。
  2. Make-Table 操作查询从上面的过程中生成本地 Access 表通过查询。

传递查询

(另存为存储的传递查询对象,将 CTE 稍微调整到派生表中,但没有理由 CTE 无法工作)

SELECT  [Tour number], 
[TISLOT Time slot begin],
[TISLOT Delivery day],
[Gate],
[Gate XML].value('/M[1]', 'varchar(50)') As [Gate1],
[Gate XML].value('/M[2]', 'varchar(50)') As [Gate2],
[Gate XML].value('/M[3]', 'varchar(50)') As [Gate3],
[Gate XML].value('/M[4]', 'varchar(50)') As [Gate4],
[Gate XML].value('/M[5]', 'varchar(50)') As [Gate5],
[Gate XML].value('/M[6]', 'varchar(50)') As [Gate6],
[Gate XML].value('/M[7]', 'varchar(50)') As [Gate7],
[Gate XML].value('/M[8]', 'varchar(50)') As [Gate8],
[Gate XML].value('/M[9]', 'varchar(50)') As [Gate9],
[Gate XML].value('/M[10]', 'varchar(50)') As [Gate10]
FROM
(
SELECT [Tour number],
[TISLOT Time slot begin],
[TISLOT Delivery day],
[Gate],
CAST('<M>' + REPLACE([Gate], ',' , '</M><M>') + '</M>' AS XML) AS [Gate XML]
FROM dbo.TISLOT
) AS dT

制表查询

(操作查询可以运行一次或保存为存储的查询对象以供定期使用)

SELECT * 
INTO [NewMSAccessLocalTable]
FROM [SQLServerPassThruQuery]

关于无法在 MS Access 2010 中导入 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36914455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com