首页 新闻 会员 周边 捐助

sql语句存储过程问题,大神们救救急!!!!!!!!!!!!!!!!

0
悬赏园豆:15 [已解决问题] 解决于 2014-12-31 09:43

create procedure ZH
@ZDName nvarchar(200),
@TableName nvarchar(100),--转移后数据所在表
@TableName1 nvarchar(100)
as
begin try
begin tran
declare @sql as varchar(200)
set @TableName='TableName'
set @TableName1='TableName1'
set @sql='Alter table '+ @TableName +' add '+@ZDName+' nvarchar(200)'
set @sql= 'update '+ @TableName +' set '+ @TableName +'.'+@ZDName+' = (select '+ @TableName1 +'.'+@ZDName+' from '+ @TableName1 +' where '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName +'.[SYSTEM_ID])WHERE EXISTS (SELECT 1 FROM '+ @TableName1 +'WHERE '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName+'.[SYSTEM_ID])'
set @sql= 'update '+ @TableName1 +'set '+@ZDName+'=null'
set @sql= 'ALTER TABLE '+ @TableName1 +' DROP COLUMN '+@ZDName+''
exec(@sql)
COMMIT TRAN
end try
begin catch
rollback tran
end catch

有什么错误的地方  

菜鸟起飞啊的主页 菜鸟起飞啊 | 初学一级 | 园豆:15
提问于:2014-12-30 14:46
< >
分享
最佳答案
0

你怎么知道SQL语句没有执行?

收获园豆:15
爱编程的大叔 | 高人七级 |园豆:30844 | 2014-12-30 16:16

我把参数换成直接的值,第二条sql语句就报错

菜鸟起飞啊 | 园豆:15 (初学一级) | 2014-12-30 16:18

@小菜鸟5: 第二条是哪一条?SQL语句是什么样?

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-30 16:20

@爱编程的大叔: 'update '+ @TableName +' set '+ @TableName +'.'+@ZDName+' = (select '+ @TableName1 +'.'+@ZDName+' from '+ @TableName1 +' where '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName +'.[SYSTEM_ID])WHERE EXISTS (SELECT 1 FROM '+ @TableName1 +'WHERE '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName+'.[SYSTEM_ID])'

这是第二条SQL语句

菜鸟起飞啊 | 园豆:15 (初学一级) | 2014-12-30 16:21

@小菜鸟5: 仔细看了一下,你的语句,很古怪的说。

set @sql='Alter table '+ @TableName +' add '+@ZDName+' nvarchar(200)'
set @sql= 'update '+ @TableName +' set '+ @TableName +'.'+@ZDName+' = (select '+ @TableName1 +'.'+@ZDName+' from '+ @TableName1 +' where '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName +'.[SYSTEM_ID])WHERE EXISTS (SELECT 1 FROM '+ @TableName1 +'WHERE '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName+'.[SYSTEM_ID])'
set @sql= 'update '+ @TableName1 +'set '+@ZDName+'=null'
set @sql= 'ALTER TABLE '+ @TableName1 +' DROP COLUMN '+@ZDName+''

这4句有问题,没有拼接SQL语句,实际效果,只有最后一句起作用了。

也就是说最终就是@sql='ALTER TABLE '+ @TableName1 +' DROP COLUMN '+@ZDName+''

你是不是忘了把@sql自己拼上去了?!?!

你这相当于写

string mystring;

mystring="122432";

mystring="abadasd";

mystring="##$$44";

最后结果就是mystring="##$$44",而不是“122432abadasd##$$44”

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-30 16:33

@爱编程的大叔: 我知道了,谢谢

菜鸟起飞啊 | 园豆:15 (初学一级) | 2014-12-31 09:42
其他回答(1)
0

你能不能先说报啥错啊,根据错误找问题嘛

隔壁老王来了 | 园豆:99 (初学一级) | 2014-12-30 15:43

sql语句没有执行

支持(0) 反对(0) 菜鸟起飞啊 | 园豆:15 (初学一级) | 2014-12-30 15:45

@小菜鸟5: 

      仔细看了一下 自己判断如下

       第二句中   WHERE EXISTS (SELECT 1 FROM '+ @TableName1 +'WHERE '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName+'.[SYSTEM_ID]),TableName为什么凭空冒出来??没有和TableName1发生关系啊(应该连接一下吧)。

     再说where可能是个鸡肋吧,因为他总在select后面执行啊,你可以把这句放在select '+ @TableName1 +'.'+@ZDName+' from '+ @TableName1 +' where '+ @TableName1 +'.[SYSTEM_ID] = '+ @TableName +'.[SYSTEM_ID]中的where并列啊

支持(0) 反对(0) 隔壁老王来了 | 园豆:99 (初学一级) | 2014-12-31 09:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册