我需要能够查询SharePoint数据库的调查结果。我遇到问题的数据类型是“评分等级”值。因此,每个表格列中的数据代表了一整组子问题及其答案。T-SQL:分析字符串与多个分隔符
所以下面的是什么是在一列中找到一个例子:
1.我们的函数定义了可用性是如何测量在生产中的硬件/软件;#3#2。我们的功能(例如SLA)存在可用性阈值水平;#3#3。我们的功能在出现阈值违规时遵循定义的流程;#4#4。我们的功能收集并维护可用性数据;#4#5。比较分析有助于识别可用性数据的趋势;#4#6。操作级别协议(OLA's)指导我们与其他内部团队的交互;#4#
问题以分号结尾,它们的答案在两个#号内。所以第一个问题的答案是3.
当我导出调查结果时,它将每个问题的格式设置为列标题,并将答案设置为下面单元格中的值,这对于获得每个问题的平均值问题,并希望能够从SQL查询中复制。
但是,如果我可以将查询结果分成两列(问题,答案)......我会很激动。
任何帮助表示赞赏。
非常感谢
汉克斯托林斯
*****附录:**
这是我的版本astander的解决方案......再次感谢!
DECLARE @Table TABLE(
QuestionSource VARCHAR(50),
QA VARCHAR(5000)
)
DECLARE @ReturnTable TABLE(
QuestionSource VARCHAR(50),
Question VARCHAR(5000),
Answer int
)
DECLARE @XmlField XML,
@QuestionSource VARCHAR(50)
INSERT INTO @Table SELECT
'Availability' AS QuestionSource,CONVERT(varchar(5000),ntext1) FROM UserData WHERE tp_ContentType = 'My Survey'
INSERT INTO @Table SELECT
'Capacity' AS QuestionSource,CONVERT(varchar(5000),ntext2) FROM UserData WHERE tp_ContentType = 'My Survey'
--SELECT * FROM @Table
DECLARE Cur CURSOR FOR
SELECT QuestionSource,
CAST(Val AS XML) XmlVal
FROM (
SELECT QuestionSource,
LEFT(Vals, LEN(Vals) - LEN('<option><q>')) Val
FROM (
SELECT QuestionSource,
'<option><q>' + REPLACE(REPLACE(REPLACE(QA,'&','&'), ';#','</q><a>'), '#', '</a></option><option><q>') Vals
FROM @Table
) sub
) sub
OPEN Cur
FETCH NEXT FROM Cur INTO @QuestionSource,@XmlField
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @ReturnTable
SELECT @QuestionSource,
T.split.query('q').value('.', 'nvarchar(max)') question,
T.split.query('a').value('.', 'nvarchar(max)') answer
FROM @XmlField.nodes('/option') T(split)
FETCH NEXT FROM Cur INTO @QuestionSource,@XmlField
END
CLOSE Cur
DEALLOCATE Cur
SELECT * FROM @ReturnTable
在使用该光标之前,我会掏出眼睛!我会在我的回答中使用基于集合的方法。 – 2010-03-04 18:28:21