@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
你这样写有很多不规范的地方,例如:
1)@ZDTybe='datetime'or @ZDTybe='money' --or 前面要带空格。
2)set @ZDLength=null --每句结尾要加分号(;)。
3) 但主要错在@ZDTybe+'('+@ZDLength+')' 这个地方,当@ZDLength=null 时就不能执行成功。
应该if 执行sql; else 执行sql;sql 分开写。
我也想说那个 拼接null的问题,被你抢先了,null+anything = null.
@耘: 哈哈,下次想到方法时,速度一定要快,不然又被抢先了...
目测or之前少了空格
还是没用
下面的sql语句没有执行啊
@小菜鸟5: 下面的哪句没执行?
@dudu: @sql='Alter table ['+ @TableName +'] add ['+@ZDName+'] '+@ZDTybe+'('+@ZDLength+')'
@小菜鸟5: print @sql执行了吗?
问问题,最好问清楚一点,要不然你就得指望看问题的人个个火眼金睛,脑袋里面自带SQL调试器。
想你这个问题,得说清楚是
1、编译过不了
2、执行中报错
3、还是执行结果错误(没希望的结果)
添加字段没有添加成功
@小菜鸟5: 逻辑错误,你Print @sql,然后把那段语句和系统生成的修改语句对比一下不就行了。
@爱编程的大叔:
@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
@小菜鸟5: 你教你的是思考方法.
SQL再复杂,你拆成简单的。哪儿出错,就到哪儿去找。
代码超过5行我就不看的。哈哈。
单步调试看看吧