2011-11-02 127 views
0

我想基于变量重命名一系列查询结尾处的列。这将是这样执行的东西:如何根据变量重命名列

DECLARE @formTable TABLE (FormID varchar(max)) 
    INSERT @formTable SELECT 'Form1'AS FormID; 
    INSERT @formTable SELECT 'Form2'AS FormID; 
    INSERT @formTable SELECT 'Form3' AS FormID; 
    INSERT @formTable SELECT 'Form5'  AS FormID; 


DECLARE @CCount TABLE (FormID varchar(max), Present varchar(max)) 
    INSERT @CCount SELECT 'Form1' AS FormID, 'Yes' AS Present; 
    INSERT @CCount SELECT 'Form2' AS FormID, 'Yes' AS Present; 

DECLARE @subject varchar(12); 
SET @subject = 'Subject 22' 

SELECT t.FormID AS Form, Present 
FROM @formTable t LEFT JOIN @CCount c ON t.FormID = c.FormID 

中创建一个表,看起来像这样:我希望它看起来像这样

Form  Present 
Form1  Yes 
Form2  Yes 
Form3  NULL 
Form5  NULL 

Form  Subject 22 
    Form1  Yes 
    Form2  Yes 
    Form3  NULL 
    Form5  NULL 

我怎样才能做到这一点?

谢谢!

回答

0

你不能使用变量作为列名 - 你可以使用dynamic SQL这样做,尽管你需要非常小心的使用动态SQL而不是引入SQL injection vulnerability

+0

如果我把变量的表将帮助? – user918967

+0

@ user918967 - 否。除非使用动态SQL,否则必须指定列的别名。 – Oded

0

一种方法是动态SQL:

declare @sql nvarchar(max) 
set @sql = 'SELECT t.FormID AS Form, Present as [' + @subject + 
    '] FROM @formTable t LEFT JOIN @CCount c ON t.FormID = c.FormID' 
exec @sql 
+0

SQL注入,任何人? – Oded