[英]SQL query cannot be imported in MS Access 2010
我在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
先感谢您
考虑MS Access中的两个特殊查询对象(在Ribbon上都可用):
传递查询
(另存为存储的传递查询对象,稍微将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]
您可以将代码放入存储过程中。 然后从Access调用它并在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.