2013-07-30 156 views
4

我试图从一个表中将列名作为数据插入到另一个SQL Server中。这是我正在使用的查询:将列名插入表中

insert into TableB (Name) 
select COLUMN_NAME 
from information_schema.COLUMNS 
where TABLE_NAME = 'TableA' 

这会返回零行。我尝试过不指定TABLE_NAME,并尝试指定TABLE_SCHEMA。这些都给出了结果,但不是我要找的。

+3

你看到的值你所期望的,当你只是运行:'SELECT COLUMN_NAME,TABLE_NAME FROM INFORMATION_SCHEMA .COLUMNS'? –

+0

@GoatCO我期待的价值观以及许多我不想插入的东西。 –

+0

当你从这些结果中添加'WHERE'标准和表名时,你什么都得不到? –

回答

2

我看不到您提供的SQL代码有任何问题。

更多故障排除:

1)如果查询:

select COLUMN_NAME 
from information_schema.COLUMNS 
where TABLE_NAME = 'TableA' 

你得到任何结果?

2)如果你试试这个INSERT,它工作吗?

INSERT INTO Table_1 (Name) 
Select 'Name1' 

3)如果选择这些列,你在列表中看到的TABLE_NAME?

Select DISTINCT(TABLE_NAME) FROM INFORMATION_SCHEMA.columns 

您的SQL代码的工作很适合我用的AdventureWorks-DB从微软(Table_1是一个空表列名):

INSERT INTO dbo.Table_1 (Name) 
Select COLUMN_NAME FROM INFORMATION_SCHEMA.columns 
where TABLE_NAME = 'ProductInventory' 

select * from table_1 

输出:

ProductID 
LocationID 
Shelf 
Bin 
Quantity 
rowguid 
ModifiedDate 
+0

我在尝试插入前运行select部分,并返回0行。插入作品。 TABLE_NAME不在列表中,似乎问题在于我搜索的表位于服务器上的其他数据库中。谢谢。 –

+0

@WilliamCox我总是很乐意帮忙。 ;) –

0

您的查询应该尽可能地发挥作用可以说,这么说,我总是使用这些查询SYS.COLUMNS和SYS.TABLES,尝试:

SELECT c.name ColumnName 
FROM sys.columns c 
JOIN sys.tables t 
    ON c.object_id = t.object_id 
WHERE t.name = 'TableA'