这是我的代码。
Create Procedure Merge_tables
@tablename varchar(20)
As
create table temp1 ( column_name varchar(20) )
insert into temp1 (column_name)
select Column_Name
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'result'
intersect
select Column_Name
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = '@tablename'
Declare @name varchar(max)
Declare @concat varchar(max)
set @concat = ''
while (select COUNT(*) from temp1)>0
Begin
set @name = (select top 1 * from temp1)
set @concat = @concat + @name + ','
select @concat as combined
delete temp1 where temp1.column_name = @name
End
Merge result as T
using @tablename as S on T.TXN_KEY = S.TXN_KEY
when not matched then
insert ('+@concat+') values ('+@concat+')
when matched then
update set T.TXN_KEY = S.TXN_KEY(?)
表temp1存储公共列名。只有特定的东西才能匹配TXN_KEY。休息一切都是通用的。在while循环结束时,@ concat的组合列名用逗号分隔。
我在merge语句中得到的错误是:
Msg 207,Level 16,State 1,Line 17
列名称无效' + @ concat +'
此外,要使更新语句工作@concat
,需要将字符串拆分为各个列的设置值。我一直试图破解这一段时间。
提前致谢。
答案 0 :(得分:2)
好的,你必须传递目标表和源表,以定义主键。这有效,我已经测试了很多。
while ((ch = getopt(argc, argv, "s:E:")) != -1)
答案 1 :(得分:0)
1)首先为什么需要INTERSECT?
2)其次没有任何东西会插入temp1,因为你说WHERE
TABLE_NAME ='@ tablename'。永远不会有表名@tablename。
将其更改为WHERE TABLE_NAME =''+ @tablename +''
3)'+ @ concat +'也需要''+ @concat +''
4)我真的认为merge语句需要在Dynamic SQL中,你可以拆分@concat列。