首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成动态字符串

生成动态字符串
EN

Stack Overflow用户
提问于 2014-12-10 07:00:08
回答 2查看 203关注 0票数 0

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

示例

如果变量包含两个值:

代码语言:javascript
复制
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)

字符串应该如下所示:

代码语言:javascript
复制
( CASE WHEN [One] > 0 THEN 1 ELSE 0 END ) + ( CASE WHEN [Two] > 0 THEN 1 ELSE 0 END )   AS [Total]

如果字符串包含三个值:

代码语言:javascript
复制
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)

字符串应该如下所示:

代码语言:javascript
复制
( 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]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-10 07:19:46

尝试以下查询:(根据您的需求更改@string值)

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

代码语言:javascript
复制
DECLARE @string VARCHAR(MAX),
@Split CHAR(1),
@X xml

SELECT @string = 'One,Two,Three',
@Split = ','
SELECT @X = CONVERT(xml,'<root><s>' 
            + REPLACE(@string,@Split,'</s><s>') + '</s></root>')
SELECT STUFF((SELECT ' + ' + Result1 AS FinalResult FROM 
     (SELECT '( CASE WHEN ['+ Result +'] > 0 THEN 1 ELSE 0 END )' 
     AS Result1 
 FROM  
    (SELECT T.c.value('.','varchar(max)') AS Result
     FROM @X.nodes('/root/s') T(c)) AS A ) 
  AS B FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 3, '') + ' 
  AS [Total]'
  AS ExpectedResult

现场演示

票数 1
EN

Stack Overflow用户

发布于 2014-12-10 07:16:47

使用这个。

代码语言:javascript
复制
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]'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27395019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档