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)