我想从临时表中获取一组列作为行。以下内容:
function check() {
var q1 = document.myform.q1.value;
var q2 = document.myform.q2.value;
var divResult = document.getElementById("resultMessage");
if (q1 == "a" && q2 == "a") {
divResult.innerHTML = "Green!";
}
if (q1 == "a" && q2 == "b") {
divResult.innerHTML = "Red!";
}
if (q1 == "b" && q2 == "a") {
divResult.innerHTML = "Yellow!";
}
if (q1 == "b" && q2 == "b") {
divResult.innerHTML = "Blue!";
}
}
产生类似
的东西<!DOCTYPE html>
<html>
<head>
<title>Food Quiz</title>
</head>
<body>
<form name="myform" method="post">
<label for="q1">Question 1: Question...?</label>
<input type="radio" name="q1" value="a"> Answer A </br>
<input type="radio" name="q1" value="b"> Answer B </br>
</br>
<label for="q2">Question 2: Question...?</label>
<input type="radio" name="q2" value="a"> Answer A </br>
<input type="radio" name="q2" value="b"> Answer B </br>
</br>
</br>
</br>
</br>
</br>
<input type="submit" value="submit" onclick="check(); return false;">
</br>
</br>
</form>
<p>
Results:
</p>
</br>
<div style="background-color:lightblue" id="resultMessage" name="answer">
</div>
</body>
</html>
我可以将其转换为获取
select name from tempdb.sys.columns where object_id = object_id('tempdb..##myTempTable')
?在列中,不是单个值。
我提前不知道列的名称。
答案 0 :(得分:1)
没有单一的语法会以这种方式转动这些数据。
SQL语言(对于任何数据库)具有公司要求,您知道在查询编译时中结果中每列的数量和类型。这是数据库引擎确定正确权限和计算执行计划所必需的。即使SELECT *
查询也满足此要求,因为查询使用的表中列的数量和类型是固定且已知的(至少在单个查询的生命周期内)。
这个问题要求做什么打破了这个要求。列标题由数据确定,因此数据库引擎无法知道结果需要多少列,直到在查询开始执行之后。
解决此问题的唯一方法是将查询分为三个单独的步骤:
答案 1 :(得分:-1)
declare @cols varchar(max)=''
declare @query varchar(max)
select @cols=''''+name+''','+@cols from tempdb.sys.columns
where object_id = object_id('tempdb..##myTempTable')
select @cols=left(@cols,len(@cols)-1)
set @query= 'select ' + @cols
execute(@query)
如果您需要名称列,请更改此行
select @cols=''''+name+''''+ name +','+@cols from sys.columns
where object_id = object_id('hrc.dbo.car')