【加急】从Access导入大量数据表如何转换类型?

是是非非 2004-12-25 03:22:30
现有一个Access数据库,里面有100多个表
导入SQL Server以后
原来的文本字段都变成 nvarchar
备注全部变成 ntext

我想做到这样:
文本字段转换成 varchar 长度按照原来设定的长度
备注字段也转换成 varchar(8000) (不用考虑数据丢失的情况)

不可能手工一个一个转的
不管是用什么办法,是在导入前还是导入后,只要能实现就好
...全文
117 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
是是非非 2004-12-25
  • 打赏
  • 举报
回复
谢谢…………
zjcxc 元老 2004-12-25
  • 打赏
  • 举报
回复
ntext就只有在导入的时候设置了
zjcxc 元老 2004-12-25
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_set]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_set]
GO

/*--将所有的表中,数值类型由nchar,nvarchar改为char,varchar

--*/

/*--调用示例:
exec p_set
--*/
--修改的存储过程
create procedure p_set
as
declare tb cursor for
SELECT sql='alter table ['+d.name
+'] alter column ['+a.name+'] '
+stuff(b.name,1,1,'')+'('+cast(a.length as varchar)+')'
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where
b.name in('nchar','nvarchar')
and
not exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) --主键不能修改
order by d.name,a.name

declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb into @sql
end
close tb
deallocate tb
go
是是非非 2004-12-25
  • 打赏
  • 举报
回复
是用SQL的导入/导出向导

因为表太多,字段也太多

算起来有 127 * (8~20) 个字段

有没有别的办法转换?
zjcxc 元老 2004-12-25
  • 打赏
  • 举报
回复
你用什么方法导入SQL的? 如果是用SQL的导入/导出向导,则在导入的时候,为字段设置类型就行了
也就是在"选择源表和视图"这步中,点"转换"按钮,设置目的字段的类型

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧