2011-11-15 81 views
0

Select * from MyTable给出以下结果字符串函数生成的SQL Server动态查询2008

AttributeID       AttributeName 
------------------------------------ ------------------------ 
6B93119B-263B-4FED-AA89-198D26A3A3C4 DOB 
E27DBA94-F387-460A-BC02-84878692BDF6 Sex 
ABF3B85C-0DEA-44FE-857A-AC63520F7294 History 

现在我想生成如下格式的动态查询(与PIVOT一起使用)

SELECT 
    [6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB, 

    [E27DBA94-F387-460A-BC02-84878692BDF6] Sex, 

    [ABF3B85C-0DEA-44FE-857A-AC63520F7294] History 

如何在SQL Server 2008中执行此操作?

回答

0

下面产生所需的结果对我来说:

DECLARE @Query VARCHAR(MAX); 

SET @Query = 'SELECT '; 

WITH Data AS (
    SELECT '6B93119B-263B-4FED-AA89-198D26A3A3C4' AS AttributeID, 'DOB' AS AttributeName 

    UNION ALL 

    SELECT 'E27DBA94-F387-460A-BC02-84878692BDF6', 'Sex' 

    UNION ALL 

    SELECT 'ABF3B85C-0DEA-44FE-857A-AC63520F7294', 'History' 
) 
SELECT @Query = @Query + '''' + AttributeID + ''' ' + AttributeName + ', ' 
FROM Data 

SET @Query = SUBSTRING(@Query, 1, LEN(@Query) - 1); 

SELECT @Query 

编辑:只要是明确的,SQL的上述样品中开始“WITH数据AS(”且结束于闭括号的部(“)”)就是那里的样本数据。你可以完全忽略它,因此样品变为:

DECLARE @Query VARCHAR(MAX); 

SET @Query = 'SELECT '; 

SELECT @Query = @Query + '''' + AttributeID + ''' ' + AttributeName + ', ' 
FROM MyTable 

SET @Query = SUBSTRING(@Query, 1, LEN(@Query) - 1); 

SELECT @Query 
+0

@Looks不错。但我无法确保'MyTable'中的行数。有时候桌子上可能会有'性',有时可能不会。 – Rauf

+0

无论数据表中有多少行(与您的MyTable相当),上面的代码都可以工作。唯一不行的情况是零行。 – srgerg

+0

编号我的问题是我不能硬编码'SELECT'E27DBA94-F387-460A-BC02-84878692BDF6','性别' ' – Rauf

0
DECLARE @query VARCHAR(MAX) 
SET @query = 'SELECT ' 

SELECT @query = @query + '[' + CONVERT(NVARCHAR(50),AttributeID) + '] ' + AttributeName + ',' 
FROM MyTable 

PRINT @query