我有一个连接到Lotus Notes数据库的链接服务器作为源。目标将是MS SQL数据库。
我有两个临时表。第一个临时表是从链接服务器中提取表名。从那里,我想为每个表做一个记录计数,并将该值存储到表名旁边的第二个临时表中。
我无法为每个表名运行循环或游标,然后使用每个表名的记录计数更新第二个临时表。
现在我收到错误"语法不正确'执行'"。 SET record_count = Execute(@sqlCommand)
Declare @DB_tables table (
table_cat varchar(1500),
table_schem varchar(1500),
table_name varchar(1500),
table_type varchar(1500),
remarks varchar(1500)
)
Declare @temp_table table (
table_name varchar(1500),
record_count varchar(255),
drop_script varchar(1500),
update_script varchar(1500)
)
--Load Initial data from linked server database
insert into @DB_Tables
exec sp_tables_ex [LINKED_SERVER_DB]
--Load table name from Stored Procedure
INSERT INTO @temp_table (table_name)
SELECT table_name from @DB_Tables
--select * from @temp_table
--Variable to hold each table name in a loop or cursor
declare @tbl_name varchar(1500)
--declare @sqlCommand varchar(1500)
declare cur cursor for select table_name from @DB_Tables
Open cur
--Loop through each table name from the first temp table
--then update the second temp table (@temp_table) with the record count
FETCH NEXT FROM cur into @tbl_name
While @@FETCH_STATUS = 0 BEGIN
declare @sqlCommand varchar(1500)
--query used to get the record count from the frist temp table (@DB_tables)
SET @sqlCommand = 'select count(*) from '+@tbl_name
UPDATE @temp_table
SET record_count = Execute(@sqlCommand)
END
CLOSE cur
Deallocate cur
select * from @temp_table
答案 0 :(得分:0)
使用执行表变量并不容易,因为动态SQL是在不同的上下文中执行的,并且没有看到变量,你无法通过这种方式分配结果。 / p>
您可以使用以下语法将结果插入表变量:
insert into @temp_table
execute ('select ' + @tbl_name + ', count(*) from ' + @tbl_name ...)
或者使用temp。表,从那以后你也可以在动态SQL中引用它们,所以你可以做类似的事情:
create table #temp_table (
table_name varchar(1500),
record_count varchar(255),
drop_script varchar(1500),
update_script varchar(1500)
)
...
Execute('update #temp_table set record_count = (select count(*) from '
+@tbl_name+') where table_name = '''+@tbl_name+''')