Sql server SQL Server迁移帮助使用“创建表”;dbo。”;
我运行了SQL Server迁移帮助,仅将我的后端表从Access 2003数据库迁移到SQL Server 2008 Express。现在,当我通过ODBC连接到SQL Server时,我所有的表都被命名为“dbo.tablename”。我现有的所有查询和表单都不使用这些名称。解决这个问题的最佳方法是什么Sql server SQL Server迁移帮助使用“创建表”;dbo。”;,sql-server,ms-access,Sql Server,Ms Access,我运行了SQL Server迁移帮助,仅将我的后端表从Access 2003数据库迁移到SQL Server 2008 Express。现在,当我通过ODBC连接到SQL Server时,我所有的表都被命名为“dbo.tablename”。我现有的所有查询和表单都不使用这些名称。解决这个问题的最佳方法是什么 是否需要更改架构名称?我将使用什么SQL语句来处理此问题?我做了两件不同的事情来解决上述问题中详细介绍的问题。首先,我创建了一个例程来重命名这些表。后来,我决定放弃这一点,并编写了一个不同的
是否需要更改架构名称?我将使用什么SQL语句来处理此问题?我做了两件不同的事情来解决上述问题中详细介绍的问题。首先,我创建了一个例程来重命名这些表。后来,我决定放弃这一点,并编写了一个不同的例程(如下所列),在数据库启动时处理表的链接
Public Sub subChangeLinkedTableNames()
Dim dbCurr As DAO.Database
Dim tdfCurr As DAO.TableDef
Set dbCurr = CurrentDb()
For Each tdfCurr In dbCurr.TableDefs
If Len(tdfCurr.Connect) > 0 Then
If Left(tdfCurr.Name, 4) = "dbo_" Then
tdfCurr.Name = Replace(tdfCurr.Name, "dbo_", "")
End If
End If
Next
Set tdfCurr = Nothing
Set dbCurr = Nothing
End Sub
上面的代码运行良好,但最终我决定编写一个例程,在每次打开Access数据库时自动重新链接表。此例程遍历要链接的表列表,并为每个表调用此sub。请注意,我正在通过在名为sLocalTableName的变量/参数中指定希望表具有的名称来解决表命名问题:
Private Sub LinkODBCTable(sSourceTableName As String, sLocalTableName As String, sIndexFields As String, sConString As String)
Dim dbCurrent As DAO.Database
Dim tdfCurrent As DAO.TableDef
Set dbCurrent = DBEngine.Workspaces(0).Databases(0)
On Error Resume Next
'Let's not accidentally delete a local table of the same name
If Len(dbCurrent.TableDefs(sLocalTableName).Connect) > 0 Then
dbCurrent.TableDefs.Delete sLocalTableName
End If
Select Case Err.Number
Case 0
'Do Nothing
Case Else
Err.Clear
'Case 3011
'Table does not exist
End Select
Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect = sConString
tdfCurrent.SourceTableName = sSourceTableName
dbCurrent.TableDefs.Append tdfCurrent
If Err.Number <> 0 Then
'Sometimes 3010 occurs here and I don't know why. A compact and repair always seems to fix it.
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
Err.Clear
End If
If sIndexFields <> "" Then
'sIndexFields should be field names, each enclosed in brackets, comma separated
'Most of the time it will just be one field
'This is to tell Access which field(s) is the Primary Key
dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sIndexFields & ")", dbFailOnError
If Err.Number <> 0 Then
If Err.Number = 3283 Then
'Primary Key Already Exists
Else
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
End If
Err.Clear
End If
End If
Set tdfCurrent = Nothing
Set dbCurrent = Nothing
End Sub
私有子链接ODBCTable(sSourceTableName作为字符串,sLocalTableName作为字符串,sIndexFields作为字符串,sConString作为字符串)
Dim dbCurrent作为DAO.Database
Dim TDFCCurrent作为DAO.TableDef
设置dbCurrent=DBEngine.Workspaces(0).数据库(0)
出错时继续下一步
'不要意外删除同名的本地表
如果Len(dbCurrent.TableDefs(sLocalTableName.Connect)>0,则
dbCurrent.TableDefs.Delete sLocalTableName
如果结束
选择案例错误编号
案例0
“什么也不做
其他情况
呃,明白了
“案件3011
'表不存在
结束选择
设置TDFCCurrent=dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect=sConString
TDFCCurrent.SourceTableName=sSourceTableName
dbCurrent.TableDefs.Append TDFCCurrent
如果错误号为0,则
有时3010发生在这里,我不知道为什么。一辆小型车和一辆修理车似乎总能把它修好。
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
呃,明白了
如果结束
如果sIndexFields为“”,则
'sIndexFields应该是字段名,每个字段都用括号括起来,用逗号分隔
大多数情况下,这只是一个领域
'这是为了告诉Access哪个字段是主键
dbCurrent.执行“在[”&sLocalTableName&“](“&sIndexFields&”)上创建索引\uuuUniqueIndex”,dbFailOneError
如果错误号为0,则
如果错误编号=3283,则
'主键已存在
其他的
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
如果结束
呃,明白了
如果结束
如果结束
设置TDFCCurrent=Nothing
设置dbCurrent=Nothing
端接头
我做了两件不同的事情来解决上述问题中详述的问题。首先,我创建了一个例程来重命名这些表。后来,我决定放弃这一点,并编写了一个不同的例程(如下所列),在数据库启动时处理表的链接
Public Sub subChangeLinkedTableNames()
Dim dbCurr As DAO.Database
Dim tdfCurr As DAO.TableDef
Set dbCurr = CurrentDb()
For Each tdfCurr In dbCurr.TableDefs
If Len(tdfCurr.Connect) > 0 Then
If Left(tdfCurr.Name, 4) = "dbo_" Then
tdfCurr.Name = Replace(tdfCurr.Name, "dbo_", "")
End If
End If
Next
Set tdfCurr = Nothing
Set dbCurr = Nothing
End Sub
上面的代码运行良好,但最终我决定编写一个例程,在每次打开Access数据库时自动重新链接表。此例程遍历要链接的表列表,并为每个表调用此sub。请注意,我正在通过在名为sLocalTableName的变量/参数中指定希望表具有的名称来解决表命名问题:
Private Sub LinkODBCTable(sSourceTableName As String, sLocalTableName As String, sIndexFields As String, sConString As String)
Dim dbCurrent As DAO.Database
Dim tdfCurrent As DAO.TableDef
Set dbCurrent = DBEngine.Workspaces(0).Databases(0)
On Error Resume Next
'Let's not accidentally delete a local table of the same name
If Len(dbCurrent.TableDefs(sLocalTableName).Connect) > 0 Then
dbCurrent.TableDefs.Delete sLocalTableName
End If
Select Case Err.Number
Case 0
'Do Nothing
Case Else
Err.Clear
'Case 3011
'Table does not exist
End Select
Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect = sConString
tdfCurrent.SourceTableName = sSourceTableName
dbCurrent.TableDefs.Append tdfCurrent
If Err.Number <> 0 Then
'Sometimes 3010 occurs here and I don't know why. A compact and repair always seems to fix it.
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
Err.Clear
End If
If sIndexFields <> "" Then
'sIndexFields should be field names, each enclosed in brackets, comma separated
'Most of the time it will just be one field
'This is to tell Access which field(s) is the Primary Key
dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sIndexFields & ")", dbFailOnError
If Err.Number <> 0 Then
If Err.Number = 3283 Then
'Primary Key Already Exists
Else
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
End If
Err.Clear
End If
End If
Set tdfCurrent = Nothing
Set dbCurrent = Nothing
End Sub
私有子链接ODBCTable(sSourceTableName作为字符串,sLocalTableName作为字符串,sIndexFields作为字符串,sConString作为字符串)
Dim dbCurrent作为DAO.Database
Dim TDFCCurrent作为DAO.TableDef
设置dbCurrent=DBEngine.Workspaces(0).数据库(0)
出错时继续下一步
'不要意外删除同名的本地表
如果Len(dbCurrent.TableDefs(sLocalTableName.Connect)>0,则
dbCurrent.TableDefs.Delete sLocalTableName
如果结束
选择案例错误编号
案例0
“什么也不做
其他情况
呃,明白了
“案件3011
'表不存在
结束选择
设置TDFCCurrent=dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect=sConString
TDFCCurrent.SourceTableName=sSourceTableName
dbCurrent.TableDefs.Append TDFCCurrent
如果错误号为0,则
有时3010发生在这里,我不知道为什么。一辆小型车和一辆修理车似乎总能把它修好。
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
呃,明白了
如果结束
如果sIndexFields为“”,则
'sIndexFields应该是字段名,每个字段都用括号括起来,用逗号分隔
大多数情况下,这只是一个领域
'这是为了告诉Access哪个字段是主键
dbCurrent.执行“在[”&sLocalTableName&“](“&sIndexFields&”)上创建索引\uuuUniqueIndex”,dbFailOneError
如果错误号为0,则
如果错误编号=3283,则
'主键已存在
其他的
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
如果结束
呃,明白了
如果结束
如果结束
设置TDFCCurrent=Nothing
设置dbCurrent=Nothing
端接头
在查询中根本不需要重命名表。这也是我的想法,但我在Access中使用绑定表单,并使用DSN通过ODBC进行链接,因此我实际上无法控制链接表的名称。您不“控制链接表的名称”是什么意思?不,您不能控制SQL Server表的名称,但可以完全控制Access前端中链接表的名称。而默认名称为wh