Sqlserver怎么会有这个毛病啊?真恶心! 不给变量赋值,就默认为nullnull与其他值运算,都是null 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 按着常理,变量没有赋值,它应该输出字符vvvsqlserver的常理是没有赋值的变量是null,而null加任何东西都为null... declare @str varchar(300) declare @int int --Set @str = '' --Set @int = '' Print 'vvv' + @str + Cast(@int as Varchar) -----------------楼主是自己理解错了吧,当没有对变量给初值时,值 为null ,null+任何值=null所以 print 出来结果是什么也没有,但把print 改为 select 时就会显示 null.当对变量赋值时,结果当然是vvv0 了. 有没有什么办法让不为变量赋值也能输出vvv啊?declare @str varchar(300) declare @int int print 'vvv' + isnull(@str,'') + Cast(isnull(@int,'') as Varchar) --vvv0 declare @str varchar(300)declare @str2 varchar(300)Set @str = 'Select * From pubs.dbo.employee'--Set @str2 = nullexec (@str + @str2)奇怪啊,既然null加任何东西都为null,那我这样执行后为何还能输出值呢? 而且你的@int是int,如果set @int=''那其實@int是=0 declare @str varchar(300) declare @int int --Set @str = '' --Set @int = '' Print 'vvv' + isnull(@str,'') + Cast(isnull(@int,'') as Varchar) ----vvv0结果是这样让我有些吃惊。为什么是vvv0 而不是vvv呢?应该 isnull(@int,''),这里搞的鬼 isnull 之后,‘’变成了整型的了,而''的整型转成字符之后就成了0。看declare @i int select cast (isnull(@i ,'') as varchar) as v,isnull(@i ,'') as b v b ------------------------------ ----------- 0 0(所影响的行数为 1 行)现在不吃惊了,因为之前有了解过null是有类型的... --请楼主来试试,这样有没有结果???declare @str varchar(300) declare @str2 varchar(300) declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee' set @s=@str+@str2exec (@s) 那怎么样让@int用isnull转换后连0都没有了呢?或是用其它的办法replace替换下? declare @str varchar(40) declare @str2 varchar(20) Set @str = 'Select * From pubs.dbo.employee' --Set @str2 = null select @str+ @str2 as aexec (@str + @str2) a ------------------------------------------------------------ NULLemp_id fname minit lname job_id job_lvl pub_id hire_date --------- -------------------- ----- ------------------------------ ------ ------- ------ ------------------------------------------------------ PMA42628M Paolo M Accorti 13 35 0877 1992-08-27 00:00:00.000PSA89086M Pedro S Afonso 14 89 1389 1990-12-24 00:00:00.000--吓我一跳,难道是exec 有自己的优化了吧...--试试exec null-- 服务器: 消息 156,级别 15,状态 1,行 1-- 在关键字 'null' 附近有语法错误。----------------------------------------------不行。--说明exec干掉了null 发表于:2007-12-03 10:39:318楼 得分:0 --请楼主来试试,这样有没有结果??? SQL codedeclare @str varchar(300) declare @str2 varchar(300) declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee' set @s=@str+@str2exec (@s) ------------肯定木有...的 那怎么样让@int用isnull转换后连0都没有了呢?或是用其它的办法replace替换下?-------------那你就不要用 @int 为int型的...改成varchar的。 declare @str varchar(300) declare @str2 varchar(300) declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee' set @s=@str+@str2exec (@s)declare @str varchar(300) declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee' set @s=@strexec (@s)我崩溃了,这两段代码各位高手分别执行执行看输出,同样的Sql语句,居然一个输出命令已成功完成,一个输出表格。这都什么破毛病啊! 第一个是肯定没有结果的。因为@str+@str2=null,所有@s 也是null第二个是有结果的,@str 是有初值的,所有@s也是有初值所以"同样的Sql语句,居然一个输出命令已成功完成,一个输出表格。" 这是完全正确的 lz你仔细分析一下 你上面两个@s的值再做比较好吗?不是相同的东西的。 那怎么样让@int用isnull转换后连0都没有了呢?或是用其它的办法replace替换下?declare @str varchar(300) declare @int int select 'vvv' + isnull(@str,'') + case when @int is null then '' else cast(@int as varchar) end/* vvv(所影响的行数为 1 行)*/ 谁能帮我看看这样的SQL语句怎么写 求助:分行 如何删除一个列 从EXCEL中导入数据时如何跳开前面的几行表头开始到数据? 请问这样的触发器应该怎样写?? sql2000无法启动了 初学者 简单问题:如何删除A1!= 皮衣 和大衣 的所有记录阿 datetime数据不能用>和<啊? select语句分组汇总的问题 还原备份数据库后数据丢了,在线等,急! 查询重复记录中的一条数据(不是所有列都重复的)
declare @str varchar(300)
declare @int int --Set @str = ''
--Set @int = '' Print 'vvv' + @str + Cast(@int as Varchar) -----------------楼主是自己理解错了吧,当没有对变量给初值时,值 为null ,null+任何值=null
所以 print 出来结果是什么也没有,但把print 改为 select 时就会显示 null.
当对变量赋值时,结果当然是vvv0 了.
有没有什么办法让不为变量赋值也能输出vvv啊?
declare @str varchar(300)
declare @int int print 'vvv' + isnull(@str,'') + Cast(isnull(@int,'') as Varchar) --
vvv0
declare @str2 varchar(300)Set @str = 'Select * From pubs.dbo.employee'
--Set @str2 = null
exec (@str + @str2)奇怪啊,既然null加任何东西都为null,那我这样执行后为何还能输出值呢?
如果set @int=''
那其實@int是=0
declare @int int --Set @str = ''
--Set @int = '' Print 'vvv' + isnull(@str,'') + Cast(isnull(@int,'') as Varchar)
----
vvv0结果是这样让我有些吃惊。
为什么是vvv0 而不是vvv呢?
应该 isnull(@int,''),这里搞的鬼 isnull 之后,‘’变成了整型的了,而''的整型转成字符之后就成了0。看declare @i int
select cast (isnull(@i ,'') as varchar) as v,isnull(@i ,'') as b
v b
------------------------------ -----------
0 0(所影响的行数为 1 行)
现在不吃惊了,因为之前有了解过null是有类型的...
--请楼主来试试,这样有没有结果???declare @str varchar(300)
declare @str2 varchar(300)
declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee'
set @s=@str+@str2exec (@s)
declare @str2 varchar(20) Set @str = 'Select * From pubs.dbo.employee'
--Set @str2 = null
select @str+ @str2 as a
exec (@str + @str2) a
------------------------------------------------------------
NULL
emp_id fname minit lname job_id job_lvl pub_id hire_date
--------- -------------------- ----- ------------------------------ ------ ------- ------ ------------------------------------------------------
PMA42628M Paolo M Accorti 13 35 0877 1992-08-27 00:00:00.000
PSA89086M Pedro S Afonso 14 89 1389 1990-12-24 00:00:00.000--吓我一跳,难道是exec 有自己的优化了吧...
--试试
exec null
-- 服务器: 消息 156,级别 15,状态 1,行 1
-- 在关键字 'null' 附近有语法错误。
--------------------------------------------
--不行。
--说明exec干掉了null
declare @str varchar(300)
declare @str2 varchar(300)
declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee'
set @s=@str+@str2exec (@s)
------------
肯定木有...的
那你就不要用 @int 为int型的...改成varchar的。
declare @str varchar(300)
declare @str2 varchar(300)
declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee'
set @s=@str+@str2exec (@s)
declare @str varchar(300)
declare @s varchar(1000)Set @str = 'Select * From pubs.dbo.employee'
set @s=@str
exec (@s)
我崩溃了,这两段代码各位高手分别执行执行看输出,同样的Sql语句,居然一个输出命令已成功完成,一个输出表格。这都什么破毛病啊!
第二个是有结果的,@str 是有初值的,所有@s也是有初值所以"同样的Sql语句,居然一个输出命令已成功完成,一个输出表格。" 这是完全正确的
你仔细分析一下 你上面两个@s的值再做比较好吗?不是相同的东西的。
declare @str varchar(300)
declare @int int select 'vvv' + isnull(@str,'') + case when @int is null then '' else cast(@int as varchar) end/*
vvv(所影响的行数为 1 行)
*/