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

动态sql生成
EN

Stack Overflow用户
提问于 2017-06-29 15:26:17
回答 3查看 902关注 0票数 0

我需要生成低于指定格式的动态sql,其中我的表是一个参数,即列数不是静态的。

例如,下面可能是表模式

代码语言:javascript
复制
ID Name
1  asd
2  xyz

我需要一个生成select语句的查询,如下所示

代码语言:javascript
复制
select 'ID :' + ID + ',Name :'+Name from table

上面生成的sql输出将类似于ID : 1,Name:asd ID : 2,Name:xyz

如果表有更多的列,则需要更改的select语句会发生以下变化

代码语言:javascript
复制
select 'ID :' + ID + ',Name :'+Name + ',Col3 :' + Col3 ...from table

有人能帮我解决这个问题吗

谢谢,Sree

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-03 11:48:16

我可以使用下面的sql实现这一点。

代码语言:javascript
复制
DECLARE @TableName VARCHAR(MAX) = 'tableName'
DECLARE @SQL VARCHAR(MAX) = 'SELECT ''{''+''' 

SELECT @SQL = @SQL + '
    "'+COLUMN_NAME+'":"''' + '+coalesce(CAST('+COLUMN_NAME+' AS VARCHAR(MAX)),'''')+''",' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName
SET @SQL =  LEFT(@SQL,LEN(@SQL)-1) + '
}'' FROM ' + @TableName

PRINT @SQL

谢谢,Sree

票数 0
EN

Stack Overflow用户

发布于 2017-06-29 15:57:03

这里有一个选项,它使用一些XML和字符串操作。

我应该添加,空值将被排除。

示例

代码语言:javascript
复制
Declare @YourTable Table ([ID] varchar(50),[Name] varchar(50))
Insert Into @YourTable Values 
 (1,'asd')
,(2,'xyz')

Select stuff(
        replace(
         replace(
          replace(
           replace(
            (Select * from @YourTable for XML RAW)
           ,'<row ',',')
          ,'="',':')
         ,'" ',',')
        ,'"/>','')
       ,1,1,'')

返回

代码语言:javascript
复制
(No column name)
ID:1,Name:asd,ID:2,Name:xyz
票数 1
EN

Stack Overflow用户

发布于 2017-06-29 15:46:30

使用信息架构视图。它们包含生成动态sql所需的所有信息。剩下的只是简单的SQL和耐心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44829281

复制
相关文章

相似问题

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