2014-02-08 4 views
0

У меня есть такой запрос.Как отобразить имя столбца как данные в другом столбце

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

Я должен показать еще один столбец, который является первым двумя буквами динамически выбранного имени столбца «Тема». Я попытался использовать функцию SUBSTRING, как показано ниже, но он извлекает первую 2-х букву данных. Вместо этого я хочу получить первые 2 буквы имени столбца. Пожалуйста, дайте мне знать, что я делаю неправильно здесь.

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

Вы должны быть осторожны, потому что это решение является рискованным с точки зрения инъекций SQL. –

+0

@BogdanSahlean - не могли бы вы показать нам, как это можно сделать здесь? –

+0

Попробуйте это 'SET @Subject = 'p2AAA; SELECT 1 AS SqlInjection; - '; EXEC (...); '. –

ответ

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

Я даю правильные значения с тремя перевернутыми запятыми вокруг + @ SUBJECT_SPLIT +. Я понятия не имею, почему это сработало с тремя перевернутыми запятыми, это будет очень полезно, если кто-то сможет это сделать.

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) + '' ' «'. –

Смежные вопросы