如何显示列名称作为另一列中的数据
我有这样的查询。如何显示列名称作为另一列中的数据
EXEC('SELECT FirstName, LastName,' + @Subject + ' FROM Student')
我必须再显示一列,它是动态选择的列名“主题”的前两个字母。 我已经尝试过使用SUBSTRING函数,但是它会提取数据的前两个字母。相反,我想获取列名的前两个字母。请让我知道我在这里做错了什么。
EXEC('SELECT FirstName, LastName,' + @Subject + ', SUBSTRING('[email protected]+',1,2) FROM Student')
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')
你不能:) –
说@SUBJECT_SPLIT是p2,然后它搜索列名“p2”。由于没有列作为“p2”,所以会引发错误 – techblog
因为@ SUBJECT_SPLIT是一个字符串,所以需要使用字符串分隔符:= =''''+ SUBSTRING(@ subject,1,2)+''' “'。 –
你必须小心,因为这种解决方案从SQL注入的角度来看是有风险的。 –
@BogdanSahlean - 你能告诉我们它是如何在这里做SQL注入的吗? –
试试这个'SET @Subject ='p2AAA; SELECT 1 AS SqlInjection; - “; EXEC(...);'。 –