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

Tru*_*uck 5 sql sql-server ms-access split

我在SQL中有一个dbo表,我需要根据分隔符(,)将列拆分为多个列.实现这一目标的代码就在这个问题的最后.代码完美地作为查询,但我想在MS Access 2010中导入最终表(因此在拆分后).这是错误的,因为我找不到ODBC或查询文件的表.另外,由于"声明"功能,我无法将此代码放在视图函数中.代码来自(它还显示我想用我的代码做什么):https: //raresql.com/2015/08/22/sql-server-how-to-split-one-column-into-multiple-列/

你能帮帮我吗?

要将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
Run Code Online (Sandbox Code Playgroud)

先感谢您

gof*_*fr1 1

您可以将代码放入存储过程中。然后从 Access 中调用它并借助记录集将其放入表中:

Dim db As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim rstCurr As DAO.Recordset
Dim dbsCurr As Database

db.Open "Provider=SQLNCLI11;Server=SERVER\INSTANCE;Database=MyDataBase;Trusted_Connection=yes;"
db.CommandTimeout = 180
db.CursorLocation = adUseClient

Set rs = db.Execute("EXEC dbo.StoredProc")

Set dbsCurr = Access.CurrentDb
Set rstCurr = dbsCurr.OpenRecordset("AccessTable", dbOpenDynaset)

Do Until rs.EOF

    rstCurr.AddNew
    rstCurr.Fields(0).value = rs.Fields(0).value
    rstCurr.Fields(1).value = rs.Fields(1).value
    ...

    rstCurr.Update
    rs.MoveNext
Loop

Set rs = Nothing
db.Close: Set db = Nothing
Run Code Online (Sandbox Code Playgroud)