Sql server 生成动态字符串

Sql server 生成动态字符串,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有以下变量来生成动态字符串 例如: 如果变量包含两个值: DECLARE @Dynamic_Variables varchar(max) = 'One,Two' DECLARE @SQL varchar(max) SET @SQL = '( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END ) AS [Total]' PRINT(@SQL) 字符串应如下所示:

我有以下变量来生成动态字符串

例如:

如果变量包含两个值:

DECLARE @Dynamic_Variables varchar(max) = 'One,Two'
DECLARE @SQL varchar(max)

SET @SQL = '( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END )   AS [Total]'

PRINT(@SQL)
字符串应如下所示:

( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END )   AS [Total]
( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Three] > 0 THEN 1 ELSE 0 END )  AS [Total]
如果字符串包含三个值:

DECLARE @Dynamic_Variables varchar(max) = 'One,Two,Three'
DECLARE @SQL varchar(max)

SET @SQL = '( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Three] > 0 THEN 1 ELSE 0 END ) AS [Total]'

PRINT(@SQL)
字符串应如下所示:

( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END )   AS [Total]
( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Three] > 0 THEN 1 ELSE 0 END )  AS [Total]
用这个

DECLARE @Dynamic_Variables varchar(max)
DECLARE @SQL varchar(max)

 SET @Dynamic_Variables = 'One,Two, Three'

 SELECT STUFF((SELECT  '+' + Value FROM 
 (
   SELECT '( CASE WHEN [' + A.Value + '] > 0 THEN 1 ELSE 0 END )' AS Value 
   FROM 
    (
        SELECT 
            Split.a.value('.', 'VARCHAR(100)') AS Value  
            FROM  
            (
            SELECT CAST ('<M>' + REPLACE(@Dynamic_Variables, ',',
                '</M><M>') + '</M>' AS XML) AS Value 
            ) AS A 
            CROSS APPLY Value.nodes ('/M') AS Split(a)
     ) AS A
  ) AS B
  FOR XML PATH (''), type).value('.', 'Varchar(max)'),1,1,'') + ' AS [Total]'
尝试以下查询:根据您的要求更改@string值

如果需要澄清,请查看演示