T-SQL,游标,FETCH INTO。如何使用SELECT *

时间:2009-06-16 20:04:19

标签: sql sql-server tsql

我正在构建一个一次性查询来迭代一组连接的表。 select语句使用“SELECT *”。因为它是一个包含大量字段的表,所以我不想将每列指定为变量。有没有办法FETCH INTO数组或某种类型的SET,只是抓住我想要的值?

6 个答案:

答案 0 :(得分:3)

Apparently not

INTO @variable_name[ ,...n]
  

“允许将提取列中的数据放入局部变量中    列表中的每个变量(从左到右)与游标结果集中的相应列相关联。每个变量的数据类型必须匹配或者是对应结果集列的数据类型的支持隐式转换。变量的数量必须与光标选择列表中的列数相匹配。“


如果您希望使用游标,可以通过CLR Stored procedures

找到更好的灵活性

答案 1 :(得分:1)

即使有,你也不愿意。获取额外字段是SQL Server应用程序中性能降级的最常见原因之一。通过这样做,您可以限制优化程序有效使用索引的能力。

您如何在不指定列名的情况下“建议”获取所需的值?

答案 2 :(得分:1)

为什么需要使用游标?那些在SQL Server场景中不受欢迎 - 大多数时候,它们是不必要的,通常它们非常慢并且会损害性能。

你想用光标做什么?你不能以基于集合的方式做到这一点,并使用SQL Server的能力达到最大值

马克

答案 3 :(得分:1)

在2k5(SQL 2000具有不同的系统对象)中,使用SQL元数据快速编写包含长/列名列表的查询:

SELECT
    O.Name + '__' + C.Name + ' = ' + O.Name + '.' + C.Name + ','
FROM Sys.Objects O
JOIN Sys.Columns C
    ON C.Object_Id = O.Object_Id
WHERE O.Name IN ('Table1', 'Table1')
ORDER BY O.Name, C.Column_Id

我不确定你要对结果集做什么,但这可能是一个不错的开始。

此外,您可以将变量声明为SQL_VARIANT和FETCH结果集,如下所示:

DECLARE @Col1 SQL_VARIANT

SELECT @Col1 = Table1.Column1 FROM Table1

PRINT CONVERT(varchar(max), @Col1)

我不确定那会让你获得什么。

答案 4 :(得分:0)

仅针对那些每天使用SQL的人建议,而不是专门回答这个问题。

RedGate产品SQL Prompt可以使用快捷键(Ctrl-B,Ctrl-W)将外卡字符扩展为单个字段名称。这可以为您节省大量时间,并且可以更轻松地从查询中删除一些字段,以用于您确实需要的情况。

答案 5 :(得分:0)

在SQL2005中,您还可以右键单击该表并选择打开表。然后单击小SQL-Icon,您会看到select语句,例如来自YourTable的select *。再次点击!-icon,select * from将扩展到完整的fieldlist。 祝你好运。