2017-07-31 1 views
1

J'ai une liste de colonnes qui sont dynamiques, puis sélectionnez la colonne dans le tableau qui se trouve dans la liste.SQL Server Existe-t-il un moyen de sélectionner des colonnes dans une liste donnée?

Par exemple

Select (List of columns) 
from tablename 

Voici mon code

SET NOCOUNT ON; 

DECLARE @table TABLE(cols varchar(50)); 

DECLARE @tablename NVARCHAR(255); 
DECLARE @tableid INT; 
DECLARE @sSQL NVARCHAR(500); 

SET @tableid = (SELECT DISTINCT TABLEID FROM faciltyShowedDetails WHERE layerid = @layerid); 
SET @tablename = (SELECT dbo.FNC_Search_GetSearchTable(@tableid)) 

INSERT INTO @table(cols) 
    SELECT COLUMN_NAME 
    FROM faciltyShowedDetails 
    WHERE layerid = @layerid; 

Je veux choisir dans la liste de la colonne dans @table.

+0

Oui, il y a un moyen, mais à moins que vous ne vouliez une solution abstraite, veuillez fournir un code réel que vous avez. – Alex

+0

Quelle est la forme de cette liste de colonnes? Est-ce une liste CSV? –

+0

Non, je vais sélectionner la liste d'un tableau – gray

Répondre

2

Vous devez construire la requête et utiliser le SQL dynamique. En supposant que la « liste » est vraiment une liste délimitée par des virgules:

declare @sql nvarchar(max); 

set @sql = 'select [cols] from tablename'; 

set @sql = replace(@sql, '[cols]', @cols); 

exec sp_executesql @sql; 

EDIT:

Pour obtenir les colonnes d'une table, vous pouvez utiliser l'astuce:

declare @cols varchar(max); 

select @cols = ', ' + columnname 
from @table t; 

Vous avez alors pour supprimer la première virgule (en utilisant stuff()) dans le code précédent.

+0

je déclare la liste une table de chaîne comment puis-je l'utiliser comme votre @cols – gray

+0

je l'ai déjà eu. Merci pour le conseil – gray