如何显示列名称作为另一列中的数据

问题描述:

我有这样的查询。如何显示列名称作为另一列中的数据

EXEC('SELECT FirstName, LastName,' + @Subject + ' FROM Student') 

我必须再显示一列,它是动态选择的列名“主题”的前两个字母。 我已经尝试过使用SUBSTRING函数,但是它会提取数据的前两个字母。相反,我想获取列名的前两个字母。请让我知道我在这里做错了什么。

EXEC('SELECT FirstName, LastName,' + @Subject + ', SUBSTRING('[email protected]+',1,2) FROM Student') 
+0

你必须小心,因为这种解决方案从SQL注入的角度来看是有风险的。 –

+0

@BogdanSahlean - 你能告诉我们它是如何在这里做SQL注入的吗? –

+0

试试这个'SET @Subject ='p2AAA; SELECT 1 AS SqlInjection; - “; EXEC(...);'。 –

DECLARE @SUBJECT_SPLIT VARCHAR(10) 
SET @SUBJECT_SPLIT = SUBSTRING(@subject,1,2) 
EXEC('SELECT FirstName, LastName,' + @Subject + ', ''' + @SUBJECT_SPLIT + ''' 
FROM Student') 

我在+ @ SUBJECT_SPLIT +周围用3个引号给出了正确的值。我不知道为什么它使用3个引号,如果有人愿意的话,它会有很大的帮助。

您可以将外面的子:

假设列将在表中实际存在:

DECLARE @SUBJECT_SPLIT VARCHAR(10) 
SET @SUBJECT_SPLIT = SUBSTRING(@subject,1,2) 
EXEC('SELECT FirstName, LastName,' + @Subject + ',' + @SUBJECT_SPLIT + ' FROM Student') 

假设列将不存在physcially:

DECLARE @SUBJECT_SPLIT VARCHAR(10) 
SET @SUBJECT_SPLIT = SUBSTRING(@subject,1,2) 
EXEC('SELECT FirstName, LastName,' + @Subject + ', '' AS ' + @SUBJECT_SPLIT + ' FROM Student') 
+1

你不能:) –

+0

说@SUBJECT_SPLIT是p2,然后它搜索列名“p2”。由于没有列作为“p2”,所以会引发错误 – techblog

+1

因为@ SUBJECT_SPLIT是一个字符串,所以需要使用字符串分隔符:= =''''+ SUBSTRING(@ subject,1,2)+''' “'。 –