【问题标题】:Get Table Row Data as String Along With Column Names获取表行数据作为字符串以及列名
【发布时间】:2014-11-29 06:54:59
【问题描述】:

我想获取表行数据作为单个字符串以及列名(使用 SQL Server)。

假设我的表结构是:

--------------------------------------------------------------------
 LeaveTypeID     |  LeaveTypeName   |   Status   |  DisplayOrder
--------------------------------------------------------------------    
  1                   Earned Leaves      e            1 
  2                   Medical Leave      e            2 
  3                   Casual Leave       e            3 

现在例如。我想获取LeaveTypeID=1对应的详细信息

然后我想要格式的输出:

LeaveTypeID:1 & LeaveTypeName :Earned Leaves & Status :e & DisplayOrder:1

表示输出字符串格式应为:

FirstColumnName:FirstColumnValue SomeSeparator SecondColumnName:SecondColumnValue SomeSeparator......`

我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: sql sql-server database sql-server-2008


    【解决方案1】:

    试试这个。

    DECLARE @ SomeSeparator VARCHAR(2) = '&'

    SELECT 'LeaveTypeID :'
           + CONVERT(VARCHAR(10), LeaveTypeID) + ' '
           + @SomeSeparator + ' LeaveTypeName :'
           + LeaveTypeName + ' ' + @SomeSeparator
           + ' Status :' + [status] + ' ' + @SomeSeparator
           + ' DisplayOrder :'
           + CONVERT(VARCHAR(10), DisplayOrder)
    FROM   <tablename>
    WHERE  LeaveTypeID = 1 
    

    更新:动态工作

    CREATE TABLE testing
      (
         LeaveTypeID   INT,
         LeaveTypeName VARCHAR(50),
         Status        CHAR(1),
         DisplayOrder  INT,
         images        IMAGE
      )
    
    INSERT testing
    VALUES (4,'Casual Leave','e',3,NULL),
           (1,'Earned Leaves','e',1,'sdfxfgfg'),
           (2,'Medical Leave','e',2,'dgbdxg' ),
           (3,'Casual Leave','e',3,'rtxtb')
    
    DECLARE @sql           NVARCHAR(max),
            @query         VARCHAR(max)='',
            @SomeSeparator VARCHAR(2) = '&',-- SomeSeparator
            @tablename     VARCHAR(50) ='testing',-- Tablename
            @LeaveTypeID   INT =4 --filter
    
    SET @sql ='Select '
    
    SELECT @query += '+'' ' + @SomeSeparator + ' ' + column_name
                     + ' : ''+' + CASE WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN ' isnull(convert(varchar(30),'+ COLUMN_NAME+'),'''') '
                                       WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL AND DATA_TYPE = 'Image' 
                                       THEN ' isnull(convert(varchar(8000), convert(varbinary(8000),'+ COLUMN_NAME+')),'''') ' 
                                       ELSE ' isnull('+COLUMN_NAME+','''')' END
    FROM   INFORMATION_SCHEMA.COLUMNS
    WHERE  TABLE_NAME = @tablename
    
    SELECT @query = '''' + RIGHT(@query, Len(@query)-3)
    
    SET @sql +=@query + ' from ' + @tablename
               + ' where LeaveTypeID='
               + CONVERT(VARCHAR(10), @LeaveTypeID) + ''
    
    --PRINT @sql
    
    EXEC Sp_executesql @sql 
    

    【讨论】:

    • 谢谢..但是这里的列数可以不同..它们不能是静态的
    • @user3879765 - 那么选择查询是如何构建的。你能在变量中有列名吗?
    • 首先我必须得到表的所有列名,然后选择它们的值并以上述规定的格式生成输出
    • @user3879765 - 你可以使用Dynamic SQL
    • @user3879765 - 立即查看
    【解决方案2】:

    LeaveTypeID:1 & LeaveTypeName :Earned Leaves & Status :e & DisplayOrder:1

    select "LeaveTypeID:"||LeaveTypeID ||" & LeaveTypeName :"||LeaveTypeName ||" & Status :"||Status ||" & DisplayOrder:"||DisplayOrder from table;
    

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 2021-12-27
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多