首页 新闻 会员 周边 捐助

存储过程的if语句这样写怎么运行不了

0
悬赏园豆:10 [已解决问题] 解决于 2015-04-21 09:56

@ZDName nvarchar(200),
@TableName nvarchar(100),
@ZDTybe nvarchar(10),
@ZDLength nvarchar(10)

if (@ZDTybe='datetime'or @ZDTybe='money')
begin
set @ZDLength=null
end
begin
set @sql='Alter table ['+ @TableName +'] add ['+@ZDName+'] '+@ZDTybe+'('+@ZDLength+')'
exec(@sql)
print @sql
end

菜鸟起飞啊的主页 菜鸟起飞啊 | 初学一级 | 园豆:15
提问于:2015-04-20 15:05
< >
分享
最佳答案
0

你这样写有很多不规范的地方,例如:

1)@ZDTybe='datetime'or @ZDTybe='money' --or 前面要带空格。

2)set @ZDLength=null --每句结尾要加分号(;)。

3) 但主要错在@ZDTybe+'('+@ZDLength+')' 这个地方,当@ZDLength=null 时就不能执行成功。

应该if 执行sql; else 执行sql;sql 分开写。

收获园豆:4
Albert Fei | 老鸟四级 |园豆:2102 | 2015-04-20 15:41

 我也想说那个 拼接null的问题,被你抢先了,null+anything = null.

| 园豆:780 (小虾三级) | 2015-04-20 22:51

@耘: 哈哈,下次想到方法时,速度一定要快,不然又被抢先了...

Albert Fei | 园豆:2102 (老鸟四级) | 2015-04-21 13:02
其他回答(3)
0

目测or之前少了空格

收获园豆:2
dudu | 园豆:31010 (高人七级) | 2015-04-20 15:17

还是没用

下面的sql语句没有执行啊

支持(0) 反对(0) 菜鸟起飞啊 | 园豆:15 (初学一级) | 2015-04-20 15:20

@小菜鸟5: 下面的哪句没执行?

支持(0) 反对(0) dudu | 园豆:31010 (高人七级) | 2015-04-20 15:23

@dudu: @sql='Alter table ['+ @TableName +'] add ['+@ZDName+'] '+@ZDTybe+'('+@ZDLength+')'

支持(0) 反对(0) 菜鸟起飞啊 | 园豆:15 (初学一级) | 2015-04-20 15:24

@小菜鸟5: print @sql执行了吗?

支持(0) 反对(0) dudu | 园豆:31010 (高人七级) | 2015-04-20 15:26
0

问问题,最好问清楚一点,要不然你就得指望看问题的人个个火眼金睛,脑袋里面自带SQL调试器。

想你这个问题,得说清楚是

1、编译过不了

2、执行中报错

3、还是执行结果错误(没希望的结果)

收获园豆:2
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-20 15:29

添加字段没有添加成功

支持(0) 反对(0) 菜鸟起飞啊 | 园豆:15 (初学一级) | 2015-04-20 15:43

@小菜鸟5: 逻辑错误,你Print @sql,然后把那段语句和系统生成的修改语句对比一下不就行了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-20 15:47

@爱编程的大叔: 

@ZDName nvarchar(200),
@TableName nvarchar(100),
@ZDTybe nvarchar(10),
@ZDLength nvarchar(10)
as

declare @sql as varchar(2000)

declare @sql1 as varchar(2000) 

declare @sql4 as varchar(2000)
if (@ZDTybe='datetime' or @ZDTybe='money')
begin
set @ZDLength=null
set @sql4='Alter table ['+ @TableName +'] add ['+@ZDName+'] '+@ZDTybe+'('+@ZDLength+')'
print @sql4
end
else
begin
set @sql='Alter table ['+ @TableName +'] add ['+@ZDName+'] '+@ZDTybe+'('+@ZDLength+')'
exec(@sql)
print @sql
end
begin
set @sql1=' update ['+ @TableName +']
set ['+@ZDName+'] = B.['+@ZDName+']
from ['+ @TableName +'] A
inner join ['+ @TableName1 +'] B on
A.SYSTEM_ID = B.SYSTEM_ID'
print @sql1
exec(@sql1)
end

我修改后添加了数据执行

print只有sql1de

支持(0) 反对(0) 菜鸟起飞啊 | 园豆:15 (初学一级) | 2015-04-20 16:00

@小菜鸟5: 你教你的是思考方法.

SQL再复杂,你拆成简单的。哪儿出错,就到哪儿去找。

代码超过5行我就不看的。哈哈。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-20 16:40
0

单步调试看看吧

收获园豆:2
+小马哥++ | 园豆:906 (小虾三级) | 2015-04-21 08:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册