请教大师,sql如何替换所有表中含有#的数据

 我来答
blademaster717
2017-04-07 · TA获得超过1456个赞
知道小有建树答主
回答量:882
采纳率:97%
帮助的人:370万
展开全部

表数量多么,所有字段都要更新?

给个思路先:

  1. 查询所有表中带有字符型字段的字段(varchar,nvarchar  其他类型酌情考虑)

select SO.name as t_name, SC.name as f_name,ST.name as f_type from         
sysobjects   SO, -- 对象表  
syscolumns   SC, -- 列名表  
systypes     ST  -- 数据类型表   
where SO.id = SC.id 
and SO.xtype = 'U'                   -- 类型U表示表,V表示视图  
and SO.status >= 0                                      -- status >= 0 为非系统对象  
and SC.xtype = ST.xusertype
and st.name in ('varchar','nvarchar')
order by SO.name,sc.name



2.根据查询出的表名和所属字段,拼接出各表的update 语句

方法有很多种,比如从上边SQL查处的结果里把表名抽出来,逐个传入以下语句

declare @str varchar(4000)    
declare @strTN varchar(100)
set @strTN = 'CSVTable'        --定义表名
set @str = ''
select @str = @str + ',' + SC.name + '=REPLACE(' + SC.name + ',''#'','''')' from         
sysobjects   SO, -- 对象表  
syscolumns   SC, -- 列名表  
systypes     ST  -- 数据类型表   
where SO.id = SC.id 
and SO.xtype = 'U'                   -- 类型U表示表,V表示视图  
and SO.status >= 0                                      -- status >= 0 为非系统对象  
and SC.xtype = ST.xusertype
and st.name in ('varchar','nvarchar')
and SO.name = @strTN
order by SO.name,sc.name
IF @str <> '' set @str= 'update ' + @strTN + ' set ' + SUBSTRING(@str,2,4000)
PRINT @str    --打印出SQL
exec(@str)    --执行SQL

cc...2@163.com
2017-04-07 · 超过193用户采纳过TA的回答
知道小有建树答主
回答量:472
采纳率:0%
帮助的人:122万
展开全部
所有的默认值都丢失了。主要是数字类型和日期类型。
所有now(),time(),date()要改成getdate()。
所有datediff('d', time1, time2)要改成datediff(day, time1, time2)
有可能一些true/false类型不能使用,要变为1/0。
备注类型要通过cast(column as varchar)来使用。
CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。
isnull(rowname)要改成rowname = null
ACCESS的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!
转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功。
对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:delete * from user where id=10,而对SQL SERVER数据库进行删除是用:delete user where id=10.
日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式