【发布时间】:2019-03-21 09:42:35
【问题描述】:
我收到来自特定供应商的数据(多个文件),我需要记录表名以及记录/表的数量。我尝试使用以下代码:
declare
@TableName sysname,
@sqlstring nvarchar (1000);
DECLARE db_cursor CURSOR FOR
SELECT Name
FROM DataBase.dbo.Sysobjects
WHERE name like '%SupplierName%' and crdate = '20190320';
if OBJECT_ID(N'tempdb..#Mytable') is not null
exec ('drop table #MyTable');
create table #MyTable (
TableName varchar (100),
Qty int);
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
set @sqlstring = N'insert into #MyTable (TableName, Qty) select cast(' + @Tablename + N' as varchar (100)), (select count(*) from DataBase.dbo.' + quotename(@Tablename) + N' as Qty)'
EXECUTE master.dbo.sp_executesql @sqlstring
FETCH NEXT FROM db_cursor INTO @tablename
END
CLOSE db_cursor
DEALLOCATE db_cursor
我收到如下错误消息:
消息 207,级别 16,状态 1,第 1 行无效的列名称“table_1”。
消息 207,级别 16,状态 1,行 1 列名“table_2”无效。 (...)
消息 207,级别 16,状态 1,第 1 行无效的列名称“table_n”。
这可能意味着游标正在获取表名,因此错误可能在我的动态 SQL 中,但我无法修复它。 我使用的是 MS Server 2012,是 SQL 的初学者。如有任何有用的提示指出我的错误,将不胜感激。
【问题讨论】:
标签: sql-server sql-server-2012 dynamic-sql database-cursor