Sql 从字符串中选择列

Sql 从字符串中选择列,sql,sql-server,Sql,Sql Server,我有一个包含所需列的字符串,我想选择它。例如: @sqlstring = 'col1,col2,col3' 我希望使用此字符串从表中选择列。像 SELECT @sqlstring FROM MyTable 但只选择此字符串,因为表中的列数相同 col1,col2,col3 col1,col2,col3 col1,col2,col3 您可以尝试使用动态sql DECLARE @SQL VARCHAR(MAX)= 'SELECT '+ @sqlstring + ' FROM MyTa

我有一个包含所需列的字符串,我想选择它。例如:

@sqlstring = 'col1,col2,col3'
我希望使用此字符串从表中选择列。像

SELECT @sqlstring FROM MyTable 
但只选择此字符串,因为表中的列数相同

col1,col2,col3 
col1,col2,col3 
col1,col2,col3

您可以尝试使用动态sql

DECLARE @SQL VARCHAR(MAX)=  'SELECT '+  @sqlstring + ' FROM MyTable '
EXEC (@SQL)  

您需要使用动态SQL。在SQL Server中执行此操作时,我建议使用
sp\u executesql

declare @sql varchar(max);

set @sql = '
select @sqlstring
from my_table
';

set @sql = replace(@sql, '@sqlstring', @sqlstring);

exec sp_executesql @sql;

在SQL Server 2016中,他们引入了拆分字符串功能:
string\u Split

DECLARE @sqlstring  varchar(100) = 'col1,col2,col3'
DECLARE @Delimiter CHAR = ','    
SELECT LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'Value' 
FROM  
(     
     SELECT CAST ('<M>' + REPLACE(@sqlstring, @Delimiter, '</M><M>') + '</M>' AS XML) AS Data            
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a)
DECLARE@sqlstring varchar(100)='col1,col2,col3'
声明@Delimiter CHAR=','
选择LTRIM(RTRIM(Split.a.value('.','VARCHAR(100'))))'value'
从…起
(     
选择强制转换(“”+替换(@sqlstring,@Delimiter,)+“”作为XML)作为数据
)作为一个
将Data.nodes('/M')交叉应用为拆分(a)