2011-01-20 2 views
0

Предположим, у меня есть две таблицы в SQL Server: Emp, а другая - FieldsInfo.SQL и соединение в SQL Server 2005

Emp таблица выглядит с данными, как показано ниже

alt text

FieldsInfo таблица выглядит с данными, как показано ниже

alt text

Теперь я хочу, чтобы присоединиться как таблицы, таким образом, что SQL Сервер будет показывать данные из таблицы Emp, но имя поля будет отображаться от FieldsInfo таблицы в соответствии с t он отношение.

То есть Employee ID будет показан, как имя поля вместо ID и Salary будет показан, как имя поля вместо Sal, но значение будет так же, как Emp таблицы.

Я не могу сгенерировать этот тип вывода после присоединения. Поэтому, пожалуйста, помогите с правильным скриптом SQL.

благодаря

+0

Я бы предположил, что ваш дизайн плох. Назовите поля, которые вы хотите, чтобы они были названы, и полностью избавляйтесь от таблиц info полей. В противном случае все ваши запросы будут в динамическом sql, который трудно правильно писать и ужасно правильно тестировать. Это потерять ситуацию, исправить ее на уровне таблицы. (и никогда не называйте идентификатор поля ID!) – HLGEM

ответ

4

Вы можете использовать свою таблицу FieldsInfo для динамического создания инструкции SQL.

declare @SQL nvarchar(100) 
set @SQL = '' 

select @SQL = @SQL + FieldName + ' as [' + Description + '], ' 
from FieldsInfo 
where TableName = 'Emp' 

set @SQL = 'select '+ left(@SQL, len(@SQL)-1) + ' from Emp' 

exec sp_executesql @SQL 
+0

wow great ...... спасибо большое – Thomas

1

От того, как я понимаю ваш вопрос, что вы пытаетесь достичь, это не представляется возможным, потому что вам нужно динамический AS статьи, которая не поддерживается.

Пример:

SELECT EmpName AS *(SELECT TOP 1 Description FROM FieldsInfo WHERE FieldName = 'EmpName')* 
FROM Emp 

Я думаю, вы должны попытаться сделать отображение в любом приложении фактически используются результаты. Если вам нужен вывод в SQL Server, я не уверен, что временные таблицы сделают трюк.

+0

Если вы отправляете код, образцы XML или данных **, пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ({}) на панели инструментов редактора для красивого формата и синтаксиса выделите это! –

1
declare @SQL nvarchar(100) 
set @SQL = '' 
select @SQL = stuff((select ', ' + [FieldName] + ' as ['+ [Description] +']' 
        from FieldsInfo t2 
        where t2.TableName = t1.TableName 
        for xml path('')),1,1,'') 
    from FieldsInfo t1 
    group by TableName 

set @SQL = 'select '+ @SQL + ' from Emp' 

exec sp_executesql @SQL 
0

Я бы не попытаться использовать таблицу для имен полей, так как вы будете добавлять дополнительный уровень сложности.

SELECT 
    ID [Employee ID], 
    EmpName [Employee Name], 
    Sal [Salary] 
FROM 
    Emp