9 个解决方案
#1
Update TableName
set col1=isnull(col1,1),
col2=isnull(col2,1),
.....
set col1=isnull(col1,1),
col2=isnull(col2,1),
.....
#2
1楼的不错
#3
这样写的话会写死的,有500个列怎么办?好象没有什么好的方法可以简单的替换掉…………
#4
用动态SQL语句,循环所有的用户表的每一列,更新凡是NULL的都更新为1。
#5
--所有用户表信息
select * from information_schema.columns
select * from information_schema.columns
#6
动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
#7
declare @sql varchar(8000)
select @sql=''
select @sql=','+name+'=isnull('+name+',1)'+@sql from syscolumns where id=object_id('TableName')
select @sql='Update TableName Set '+stuff(@sql,1,1,'')
print @sql
--要是有500个字段,lz应该检讨一下表的设计问题了
select @sql=''
select @sql=','+name+'=isnull('+name+',1)'+@sql from syscolumns where id=object_id('TableName')
select @sql='Update TableName Set '+stuff(@sql,1,1,'')
print @sql
--要是有500个字段,lz应该检讨一下表的设计问题了
#8
人懒的话就不要写SQL了。写几个ISNULL也嫌烦。
还要从syscolumns读字段名,再组成动态语句来更新, 不知道哪个更烦。
水平高就不说了,水平过低的话,估计这段执行完成功能的批语句都写的你恨自己为什么生在中国,混口饭吃这么难。
还要从syscolumns读字段名,再组成动态语句来更新, 不知道哪个更烦。
水平高就不说了,水平过低的话,估计这段执行完成功能的批语句都写的你恨自己为什么生在中国,混口饭吃这么难。
#9
--------------------------------------------------------------
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx
在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。
2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!
此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。
您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=7&pointid2=1&pointid3=5
非常感谢您对本次活动的支持!
--------------------------------------------------------------
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx
在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。
2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!
此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。
您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=7&pointid2=1&pointid3=5
非常感谢您对本次活动的支持!
--------------------------------------------------------------
#1
Update TableName
set col1=isnull(col1,1),
col2=isnull(col2,1),
.....
set col1=isnull(col1,1),
col2=isnull(col2,1),
.....
#2
1楼的不错
#3
这样写的话会写死的,有500个列怎么办?好象没有什么好的方法可以简单的替换掉…………
#4
用动态SQL语句,循环所有的用户表的每一列,更新凡是NULL的都更新为1。
#5
--所有用户表信息
select * from information_schema.columns
select * from information_schema.columns
#6
动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
#7
declare @sql varchar(8000)
select @sql=''
select @sql=','+name+'=isnull('+name+',1)'+@sql from syscolumns where id=object_id('TableName')
select @sql='Update TableName Set '+stuff(@sql,1,1,'')
print @sql
--要是有500个字段,lz应该检讨一下表的设计问题了
select @sql=''
select @sql=','+name+'=isnull('+name+',1)'+@sql from syscolumns where id=object_id('TableName')
select @sql='Update TableName Set '+stuff(@sql,1,1,'')
print @sql
--要是有500个字段,lz应该检讨一下表的设计问题了
#8
人懒的话就不要写SQL了。写几个ISNULL也嫌烦。
还要从syscolumns读字段名,再组成动态语句来更新, 不知道哪个更烦。
水平高就不说了,水平过低的话,估计这段执行完成功能的批语句都写的你恨自己为什么生在中国,混口饭吃这么难。
还要从syscolumns读字段名,再组成动态语句来更新, 不知道哪个更烦。
水平高就不说了,水平过低的话,估计这段执行完成功能的批语句都写的你恨自己为什么生在中国,混口饭吃这么难。
#9
--------------------------------------------------------------
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx
在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。
2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!
此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。
您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=7&pointid2=1&pointid3=5
非常感谢您对本次活动的支持!
--------------------------------------------------------------
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx
在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。
2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!
此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。
您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=7&pointid2=1&pointid3=5
非常感谢您对本次活动的支持!
--------------------------------------------------------------