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
有什么错误的地方
你怎么知道SQL语句没有执行?
我把参数换成直接的值,第二条sql语句就报错
@小菜鸟5: 第二条是哪一条?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])'
这是第二条SQL语句
@小菜鸟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”
@爱编程的大叔: 我知道了,谢谢
你能不能先说报啥错啊,根据错误找问题嘛
sql语句没有执行
@小菜鸟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并列啊