SQL-Abfrage kann nicht in MS Access 2010 importiert werden

Ich habe eine Dbo-Tabelle in SQL mit einer Spalte, die ich in mehrere Spalten auf der Grundlage eines Trennzeichens (,) aufteilen muss. Der Code, um dies zu erfüllen, ist am Ende dieser Frage. Der Code funktioniert einwandfrei als Abfrage, aber ich möchte den Final Table (also nach dem Split Up) in MS Access 2010 importieren. Das ist es geht falsch, da ich den Tisch nicht mit ODBC oder der Abfragedatei finden kann. Auch wegen der "Declare" -function kann ich diesen Code nicht in eine View-function setzen. Der Code ist aus (es zeigt auch, was ich mit meinem Code machen möchte): https://raresql.com/2015/08/22/sql-server-how-to-split-one-column-into-multiple- säulen /

Kannst du mir dabei helfen?

Um eine Spalte in mehrere Spalten aufzuteilen, wird folgender Code verwendet:

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 

Vielen Dank im Voraus

Sie können Ihren Code in gespeicherte Prozedur setzen. Dann rufen Sie es aus Access und legen Sie es in die Tabelle mit Hilfe von Recordset:

 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 

Betrachten Sie zwei spezielle Abfrageobjekte (beide auf Ribbon verfügbar) in MS Access:

  1. Pass-Through-Abfrage, mit der Sie die SQL server-Syntax der angeschlossenen BackEnd beibehalten können, aber von MS Access aus laufen; Dies erfordert die Angabe von ODBC / OLEDB-Einstellungen bei der Erstellung.
  2. Make-Table-Action-Abfrage, um eine lokale Access-Tabelle von oben über die Abfrage zu erstellen.

Pass-Through- Abfrage

(als gespeichert, Pass-Through-Abfrage-object, etwas angepasst die CTE in eine abgeleitete Tabelle aber kein Grund CTE konnte nicht funktionieren)

 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 

Make-Table- Abfrage

(Aktionsabfrage kann einmal ausgeführt oder als gespeicherte Abfrageobjekt zur regelmäßigen Verwendung gespeichert werden)

 SELECT * INTO [NewMSAccessLocalTable] FROM [SQLserverPassThruQuery]