2015-12-18 3 views
-1

Как выбрать из имени таблицы, хранящегося в другом состоянии.SQL Server: выбор из сохраненных имен таблиц

Вот краткое описание сценария.

таблица 1: пункт (Itemid, ItemName)

таблица 2: категория (CatID, Itemid)

таблица 3: CatID (время, скорость)

Как вы можете видеть проблему здесь заключается в том, что имя третьей таблицы хранится во второй таблице. Учитывая, что я собираюсь использовать этот запрос в powershell, любые подсказки о том, как писать этот запрос, используя или не powershell, это welcome.

Примечание: нет способа реструктурировать дизайн, дизайн в порядке.

например

table { 
 
    border-collapse: collapse; 
 
} 
 

 
table, td, th { 
 
    border: 1px solid black; 
 
}
<table border="1" width="50%"> 
 
    <tr> 
 
    <td colspan=2><b>item</b></td> 
 
    </tr> 
 
\t <tr> 
 
    <td>itemid</td> 
 
    <td>itemname</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>it01</td> 
 
    <td>itemA</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>it02</td> 
 
    <td>itemB</td> \t \t 
 
    </tr> 
 
\t <tr> 
 
    <td>it03</td> 
 
    <td>itemC</td> \t \t 
 
    </tr> 
 
</table> 
 

 
<br/> 
 

 
<table border="1" width="50%"> 
 
    <tr> 
 
    <td colspan=2><b>Category</b></td> 
 
    </tr> 
 
\t <tr> 
 
    <td>catid</td> 
 
    <td>itemid</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>cat01</td> 
 
    <td>it01</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>cat02</td> 
 
    <td>it02</td> \t \t 
 
    </tr> 
 
\t <tr> 
 
    <td>cat03</td> 
 
    <td>it03</td> \t \t 
 
    </tr> 
 
</table> 
 

 
<br/> 
 

 
<table border="1" width="50%"> 
 
    <tr> 
 
    <td colspan=2><b>cat01</b></td> 
 
    </tr> 
 
\t <tr> 
 
    <td>time</td> 
 
    <td>rate</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>21</td> \t \t 
 
    </tr> 
 

 
</table> 
 

 
<br/> 
 

 
<table border="1" width="50%"> 
 
    <tr> 
 
    <td colspan=2><b>cat02</b></td> 
 
    </tr> 
 
\t <tr> 
 
    <td>time</td> 
 
    <td>rate</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>12</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>22</td> \t \t 
 
    </tr> 
 

 
</table> 
 

 
<br/> 
 

 
<table border="1" width="50%"> 
 
    <tr> 
 
    <td colspan=2><b>cat03</b></td> 
 
    </tr> 
 
\t <tr> 
 
    <td>time</td> 
 
    <td>rate</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>13</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>23</td> \t \t 
 
    </tr> 
 

 
</table> 
 

 
<br/> 
 

 
<table border="1" width="50%"> 
 
    <tr> 
 
    <td colspan=4><b>Output</b></td> 
 
    </tr> 
 
\t <tr> 
 
    <td>time</td> 
 
    <td>itemA</td> 
 
    <td>itemB</td> 
 
    <td>itemC</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> \t 
 
    <td>12</td> 
 
    <td>13</td> \t \t 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>21</td> \t 
 
    <td>22</td> 
 
    <td>23</td> \t 
 
    </tr> 
 

 
</table>

ответ

1

Вы можете использовать динамический T-SQL для этого:

DECLARE @TableName NVARCHAR(50) 
SELECT @TableName = catid FROM category WHERE itemID = [Some Item ID here] 
DECLARE @Query NVARCHAR(MAX) 
SET @Query = 'SELECT * FROM ' + @TableName 
EXEC sp_executesql @Query 

Для более старых версий SQL Server можно изменить последнюю строку EXEC @Query

Это должно по крайней мере указывать на вас в правильном направлении.

+0

спасибо за подсказку, это было очень полезно, помогая мне решить эту проблему и указывая в правильном направлении. –

Смежные вопросы