Sql server 带指针和游标的TSQL
要将最后一个select语句设置为游标吗Sql server 带指针和游标的TSQL,sql-server,tsql,cursor,with-statement,Sql Server,Tsql,Cursor,With Statement,要将最后一个select语句设置为游标吗 DECLARE @wec_AIMKEY numeric(17,5) DECLARE @wec_IDENT varchar(15) DECLARE @wec_QUANTITY numeric(20,2) DECLARE @wec_BOM_UNIT varchar(30) DECLARE @wec_Sort varchar(max) DECLARE @wecMother_AIMKEY numeric(17,5) s
DECLARE @wec_AIMKEY numeric(17,5)
DECLARE @wec_IDENT varchar(15)
DECLARE @wec_QUANTITY numeric(20,2)
DECLARE @wec_BOM_UNIT varchar(30)
DECLARE @wec_Sort varchar(max)
DECLARE @wecMother_AIMKEY numeric(17,5)
set @wecMother_AIMKEY = 2158310.24613
DECLARE @wecSearchIDENT varchar(15)
set @wecSearchIDENT = '0712712';
-- ACHTUNG: der ; ist Wichtig ansonsten funktioniert die WITH nicht
-- Es werden alle Artikel Positionen gesucht
WITH Tree (X_PARENT_AIMKEY, AIMKEY, CATEGORY, X_POSITION, X_QUANTITY, BOM_UNIT, IDENT, SHORT_DESC, MATERIAL, STATUSKEY, CREATE_DATE, Depth, Sort)
AS
(
SELECT X_PARENT_AIMKEY, AIMKEY, CATEGORY, X_POSITION, X_QUANTITY, BOM_UNIT, IDENT, SHORT_DESC, MATERIAL, STATUSKEY, CREATE_DATE, 0 AS Depth, CONVERT(varchar(1000), X_PARENT_AIMKEY) AS Sort
FROM VIEW_XREF_CHILD_PART
where X_PARENT_AIMKEY = @wecMother_AIMKEY
UNION ALL
SELECT CT.X_PARENT_AIMKEY, CT.AIMKEY, CT.CATEGORY, CT.X_POSITION, CT.X_QUANTITY, CT.BOM_UNIT, CT.IDENT, CT.SHORT_DESC, CT.MATERIAL, CT.STATUSKEY, CT.CREATE_DATE, Parent.Depth + 1 AS Depth,
CONVERT(varchar(1000), Parent.Sort + '|' + CONVERT(varchar(1000),CT.X_PARENT_AIMKEY)) AS Sort
FROM VIEW_XREF_CHILD_PART CT
INNER JOIN Tree as Parent ON Parent.AIMKEY = CT.X_PARENT_AIMKEY
)
-- DECLARE wec_cr_quantity_sum CURSOR local forward_only read_only static FOR
-- ALL Positions
SELECT AIMKEY, IDENT, X_QUANTITY , BOM_UNIT, Sort
FROM Tree
where IDENT = @wecSearchIDENT
ORDER BY IDENT
==>声明wec\u cr\u数量\u和光标本地前进\u仅只读\u静态
剂量工作
您知道如何创建它吗?必须使用与进入变量的列相同的数据类型声明变量
DECLARE cur CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR
SELECT AIMKEY, IDENT, X_QUANTITY , BOM_UNIT, Sort
FROM Tree
where IDENT = @wecSearchIDENT
OPEN cur
FETCH NEXT FROM cur
INTO @var_AIMKEY,@var_IDENT,@var_X_QUANTITY,@var_BOM_UNIT,@var_Sort
WHILE (@@FETCH_STATUS = 0)
BEGIN
... --do stuff with the variables
FETCH NEXT FROM cur
INTO @var1,@var2,@var3,@var4,@var5
END
CLOSE cur
DEALLOCATE cur
请注意,游标非常慢。在大多数情况下,可以构建符合逻辑要求的语句,数据库引擎可以更快地运行它。muss ich gleich mal fragen:ist der Cursor wirklich nötig?这是kanns auch,aber-viel schneller的一份快速声明。不要试图弄清楚如何使用光标来完成这项任务-你应该弄清楚如何在没有光标的情况下完成这项任务@marc_s:举出一个需要游标的例子。我想我有一个…@DerU:对我来说唯一有效的理由是如果你需要为结果的每一行执行一个存储过程set@marc_s:但存储过程操作可能会集成到语句中?!我每晚都做索引维护。我用碎片级别超过阈值的所有索引名填充游标,然后使用rebuild/reorganise执行动态sql语句。