Si tengo una lista de nombres de columna a,b,c ¿es posible generar una declaración SQL como una string (para ejecutarse dentro de EXEC como un SQL dinámico) en función de la cantidad de elementos en los nombres de esa columna?
Entonces, si tengo una tabla llamada @src
DECLARE @src AS TABLE ( list VARCHAR(max) ) INSERT INTO @src SELECT 'a' UNION SELECT 'b' UNION SELECT 'c' SELECT * FROM @src ¿Cómo puedo generar una cadena dinámicamente for each element in @src para dar una cadena a,b,c que se utilizará más dentro de una instrucción EXEC como EXEC('select'+a,b,c(coming from dynamic string)+'from mainTbl
Para demostrar mejor esto con un generador de cadenas de javascript
var src = ['a','b','c']; var target =['e','f','g']; var beginning ='select'; var end = 'from mainTbl'; var newArray=[]; src.forEach((x,i,r)=>{newArray.push(x+' '+'as '+target[i]);}); var dynamicStr = beginning+' '+newArray.reduce(function(prev,current){return prev+', '+current;})+' '+end; //to be utilized inside SQL EXEC Esto está en javascript, pero ¿es posible que TSQL genere esta cadena para cada elemento de @src para que cada vez que edite @src , el resultado final cambie dinámicamente?
Si entiendo correctamente, parece que solo necesita agregar sus "columnas".
En SQLServer 2017+ puede usar string_agg()
SELECT Concat('select ', String_Agg(quotename(list),', '), ' from t') FROM @srcAntes de 2017, puede usar el clunkier para la sintaxis de la ruta xml
select Concat('select ', Stuff(( select ', ' + QuoteName(list) from @src for xml path(''), type).value('text()[1]','nvarchar(max)'), 1, len(', '), ''), ' from t' ) as statement