Рейтинг:
2
Santosh kumar Pithani
SELECT ID,Col_Names INTO #Temp1 FROM
(VALUES(12,'EmpId'),
(21,'EmpName'),
(23,'Location'))AS Temp1(ID,Col_Names);
SELECT EmpId,EmpName,Location into #Temp2 FROM
(VALUES(1246,'Santosh kumar','HYD'),
(1215,'Harish Kumar','Channai'),
(1234,'Sai kiaran','Medak'),
(1246,'Satish','SangaReddy'))AS Temp2(EmpId,EmpName,Location);
DECLARE @query NVARCHAR(MAX);
SET @query=N'select '+(select Col_Names FROM #Temp1 WHERE ID=21)+' from #Temp2';
EXEC Sp_EXECUTESQL @query;
Member 13308004
Здравствуйте, я взял ниже ошибку, когда мне нужен столбец #Temp2. Не могли бы вы мне помочь, пожалуйста?
Многосоставный идентификатор "#Temp2.EmpId" не может быть привязан.
Выберите ID,Col_Names в #Temp1 из
(Значения(12,'EmpId'),
(1215,'EmpName'),
(23,'Location'))AS Temp1(ID,Col_Names);
Выберите EmpId,EmpName,Location в #Temp2 из
(Значения(1246,"Сантош Кумар","Хайд"),
(1215,"Хариш Кумар","Чаннай"),
(1234,"Сай Киаран","Медак"),
(1246,'Satish','SangaReddy'))AS Temp2(EmpId,EmpName,Location);
DECLARE @query NVARCHAR(MAX);
SET @query=N'Select '+(select Col_Names FROM #Temp1 WHERE ID IN (#Temp2.EmpId))+' from #Temp2';
print @query
Exec для процедуры sp_executesql @запросом;
падение таблицы #Temp1
drop table #Temp2
Santosh kumar Pithani
Могу ли я узнать, что это такое '#Temp2.EmpId)';чего вы от меня ждете?
Member 13308004
Привет,
Мне нужно использовать значение EmpId в таблице #Temp2 на месте определенных динамических имен столбцов.
Когда я пишу столбец таблицы #Temp2 в этой динамической области, он выдает ошибку.
"Многосоставный идентификатор "#Temp2.EmpId" не может быть привязан."
Как я понимаю, это относится к тексту not understand #Temp2.EmpId.
Спасибо,
Santosh kumar Pithani
если вы получаете имя столбца из другой таблицы(#temp1), то дайте его идентификатор в условии фильтра типа 'SET @query=N'Select '+(select Col_Names FROM #Temp1 WHERE ID=12)+' from #Temp2' '.здесь ID(12) принадлежит столбцу(EmpId).
Если вы хотите дать прямой то используйте
Объявить @column_name varchar(500)='EmpId'
SET @query=N'Select '+@column_name+' from #Temp2;'
Member 13308004
Выберите ID,Col_Names в #Temp1 из
(Значения(12,'EmpId'),
(999,'EmpName'),
(15,'Location'))AS Temp1(ID,Col_Names);
Выберите EmpId,EmpName,Location в #Temp2 из
(Значения(123,'Ali Veli','www'),
(999,"Угур","ррр"),
(124,'Aydin','bbb'),
(126,'Эркан','ээээ'))как Temp2(empid в,столбец empname,расположение);
DECLARE @query NVARCHAR(MAX);
SET @query=N'Select '+(select Col_Names FROM #Temp1 WHERE ID = '999' )+' from #Temp2 Where EmpId="999"';
print @query
Exec для процедуры sp_executesql @запросом;
падение таблицы #Temp1
drop table #Temp2
Но мне нужно как ниже:
Выберите ID,Col_Names в #Temp1 из
(Значения(12,'EmpId'),
(999,'EmpName'),
(15,'Location'))AS Temp1(ID,Col_Names);
Выберите EmpId,EmpName,Location в #Temp2 из
(Значения(123,'Ali Veli','www'),
(999,"Угур","ррр"),
(124,'Aydin','bbb'),
(126,'Эркан','ээээ'))как Temp2(empid в,столбец empname,расположение);
DECLARE @query NVARCHAR(MAX);
SET @query=N'Select '+(select Col_Names FROM #Temp1 WHERE ID = #Temp2.EmpId )+' from #Temp2 Where EmpId="999"';
print @query
Exec для процедуры sp_executesql @запросом;
падение таблицы #Temp1
drop table #Temp2
Это дает ошибку:
Msg 4104, Уровень 16, Состояние 1, Строка 14
Многосоставный идентификатор "#Temp2.EmpId" не может быть привязан.
Мне нужно использовать столбец #Temp2 в скобках.
Santosh kumar Pithani
Вы должны пройти, как показано ниже, но если оба значения одинаковы, то зачем вы пишете длинный код?
SET @query=N'Select '+(select Col_Names FROM #Temp1 WHERE ID IN (select EMPID from #Temp2 Where EMPID='999' )+' from #Temp2';
Member 13308004
Привет,
Большое спасибо за помощь. На самом деле, мне нужно сделать ниже ситуацию. Мне нужно поле.DATE_TIME, чтобы найти правильное имя столбца в скобках. Потому что есть столбцы для каждого дня, и мне нужно вычислить день из SHIFT_TABLE. Имена столбцов начинаются с "TPR" плюс день, например TPR13.
Объявить @SQLText NVARCHAR(MAX) = "
SELECT @SQLText += 'SELECT '
Выберите @SQLText += ( 'ТПР' + конвертировать(тип varchar,функция datepart(день.ДАТА_ВРЕМЯ) )
) +
от SHIFT_TABLE как где.идентификатор = "1" и.Ай="12" и.йил="2018" '
print @SQLText
Как я могу ее решить? большое спасибо,
Santosh kumar Pithani
Что это значит: "мне нужно поле.DATE_TIME, чтобы найти правильное имя столбца в скобках "?
вам нужно сгенерировать столбцы, например TRP13,TRP14.TRP15.. эти столбцы существовали в таблице SHIFT_TABLE? сначала отметьте это решение как правильное
Member 13308004
Объявить @SQLText NVARCHAR(MAX) = "
SELECT @SQLText += 'SELECT (SELECT '
Выберите @SQLText += ( 'ТПР' + конвертировать(тип varchar,функция datepart(день.ДАТА_ВРЕМЯ) )
) +
от SHIFT_TABLE как S, где S.ИД = а.ID ) из MAIN_TABLE как где.идентификатор="1" и.Ай="12" и.йил="2018" '
print @SQLText
Я беру сообщение об ошибке: многосоставный идентификатор "a.DATE_TIME" не может быть привязан.
SHIFT_TABLE происходит id и TPR01,TPR02,...Колонны ТПР31
MAIN_TABLE возникает, удостоверение личности, Ай, йил и ДАТА_ВРЕМЯ столбцы
Я должен вычислить день из a.DATE_TIME.
Как результат мне нужен такой, Select (выбрать TPR13 от SHIFT_TABLE как S, где S.ИД = а.ID ) из MAIN_TABLE как где.идентификатор='1' и.Ай='12' и.йил='2018'
Santosh kumar Pithani
используйте внутреннее соединение вместо подзапроса
SET @query=N'Select '+(select Col_Names FROM #Temp1 WHERE ID IN (select EMPID from #Temp2 Where EMPID='999' )+' from #Temp2';