0

我正在使用 Classic ASP(是的,我知道,但我不能)和 MS SQL 2012 作为数据库,数据类型是 nvarchar(255),字段名称是"RATE_BREAKDOWN"

数据从文本区域保存,如下所示:

Line One = 550.00
Accs = 1000.00
Total = 1550.00 

现在我想循环每一行(vbCrLf)并将其显示在<TR>

例如像这样:

<tr>
<TD> Line One : </TD>
<TD> $ 550.00 </TD>
</tr>

<tr>
<TD> Accs : </TD>
<TD> $ 1000.00 </TD>
</tr>

<tr>
<TD> Total : </TD>
<TD> $ 1550.00 </TD>
</tr>

但是我该怎么做呢?

我尝试使用拆分函数首先拆分 vbCrLf,但我必须在一个拆分内拆分(拆分两次)并且我无法让它工作,而且我认为应该有一种更简单的方法来做到这一点。

这是我尝试过的,但它是错误的:

    <%
    dim tmpValue,strtxtMSG,x,tmpValueB
    strtxtMSG = objRecordSet("RATE_BREAKDOWN")

    tmpValue = Split(strtxtMSG, vbCrLf)
    tmpValueB = Split(tmpValueB, "=")
    %>

            <% for each x in tmpValueB %>
            <tr>
            <TD> <%=tmpValueB(0)%> : </TD>
            <TD> $ <%=tmpValueB(1)%> </TD>
            </tr>
            <% next %>

由于问题与 ms sql 有什么关系,我想看看 ms sql 是否可以选择循环和拆分数据,然后将其放入数组中,而不是立即显示所有数据。像这样的东西query = "SELECT * FROM TestTable WHERE 1=1 AND SPLIT(SPLIT("RATE_BREAKDOWN","NewLine"),"=")"

的类<TD>显示为文本?

Response.Write "<tr><td>" & join(split(join(split(objLoad("RATE_BREAKDOWN"), vbCrLf), "</td></tr><tr><TD width='285' class='auto-style57'>"), "=")," : </td><td> $ ") & "</td></tr>"

width='285' class='auto-style57' 成为文本,而不是页面的 html/格式的一部分

4

1 回答 1

1

忘记所有tmp变量并进出<% %>块。只需这样做:

Response.Write "<tr><td>" & join(split(join(split(strtxtMSG, vbCrLf),
  "</td></tr><tr><td>"), "=")," : </td><td> $ ") & "</td></tr>"

当您添加其他要求时,这种情况会中断,例如,class='some-thing'因为现在您正在拆分,=但您还希望=保留一些。因此,您可以通过将那些=首先替换为不会自然出现在数据中的其他内容来解决此问题,比如说管道|字符:

strtxtMSG = Replace(strtxtMSG, "=", "|")

' then split by | instead of =

Response.Write "<tr><td>" & join(split(join(split(strtxtMSG, vbCrLf),
  "</td></tr><tr><td>"), "|")," : </td><td class='some-thing'> $ ") & "</td></tr>"

SQL Server 没有任何固有的拆分/连接功能。您可以构建一个REPLACE()执行此操作的命令:

DECLARE @RATE_BREAKDOWN NVARCHAR(255);

SELECT @RATE_BREAKDOWN = N'Line One = 550.00
Accs = 1000.00
Total = 1550.00';

SELECT '<tr><td>' + REPLACE(REPLACE(@RATE_BREAKDOWN, CHAR(13) + CHAR(10), 
  '</td></tr><tr><td>'), ' = ', ' : </td><td> $ ') + '</td></tr>';

一些花哨的高手可能会出现并提出FOR XML PATH等效的建议,可能比这更好:

DECLARE @RATE_BREAKDOWN NVARCHAR(255);

SELECT @RATE_BREAKDOWN = N'Line One = 550.00
Accs = 1000.00
Total = 1550.00';

DECLARE @r VARCHAR(MAX) = REPLACE(REPLACE(
  (SELECT @RATE_BREAKDOWN FOR XML PATH('td'),ROOT('tr')),
   ' = ', ' : </td><td> $ '), '&#x0D; ', '</td></tr><tr><td>');

SELECT @r;

但是这两种方法在 T-SQL 中执行效率都非常低,在表示层中处理得更好。为什么 SQL Server 应该知道或关心 HTML 元素,如<tr>or <td>?仅仅因为你做到并不意味着你应该这样做。

更好的是,通过构建更好的数据库模式——如果这些是单独的数据片段,为什么它们会被合并到一个列中?

于 2013-08-20T19:47:24.900 回答