尝试从Sybase执行OPENQUERY到Microsoft SQL时遇到错误:
通过获取的结果集中不允许使用重复的列名 OPENQUERY和OPENROWSET。列名称" PatientID"是重复的。
我构建的查询基于类似的admissionID和patientID加入了2个表。
For Instance:
PatID AdmID Loc PatID AdmID Doctor
1 5 NC 1 5 Smith
2 7 SC 2 7 Johnson
真正的查询当然比这更多信息。
有没有一种方法可以重命名或删除其中一个AdmID和PatID列?
我试过了:
SELECT * INTO #tempTable
ALTER #tempTable
DROP COLUMN PatID
由于PatID含糊不清,这不起作用。
我也尝试过:
SELECT firstTable.PatID as 'pID', * FROM...
这也不起作用。
答案 0 :(得分:3)
您必须为两个重复列中的一个添加别名,并在select中至少为其中一个表明确指出特定列(您在其中使用别名的列的列) ):
SELECT firstTable.PatID as 'pID', firstTable.column2, secondTable.* FROM...
注意,我仍然在secondTable上使用了通配符。
然而....
我完全避免使用*
通配符,并尝试始终准确指出您需要的列。
答案 1 :(得分:3)
结果集中允许复制和缺少列名,但在表定义中不允许(尽管给出了错误消息,看起来它们甚至不会在结果集中被允许用于此情况)。因此,如果出现上述任何一种情况,则无法使用SELECT *
构造。您需要指定字段,以便可以控制结果集中显示的字段名称。
SELECT *
INTO #TempTable
FROM OPENQUERY('SELECT tab1.Field1, tab1.Field2, tab2.Field12...');