【发布时间】:2018-10-30 20:41:42
【问题描述】:
这是我的代码;
创建表拆分器 ( 标识 INT ,Vals VARCHAR(10) ) 插入分离器值 (1,'A,B,C'), (2,'D,E,F') 声明 @Id INT 声明 @Str VARCHAR(10) DECLARE @Tbl TABLE(Id int, Vals varchar(10)) 声明 MyCursor CURSOR FOR 从拆分器中选择 Id、Vals 打开我的光标 从 MyCursor 获取下一个到 @Id、@Str 而@@FETCH_STATUS = 0 开始 插入@Tbl 选择@Id, substring(@Str,charindex(',',@Str)-1,1) 设置@Str=substring(@Str,charindex(',',@Str)+1,len(@Str)) 从 MyCursor 获取下一个到 @Id,@Str 结尾 关闭我的光标 DEALLOCATE MyCursor我想逐行列出值,如下所示;
1-A
1-A
1-A
2-D
2-E
2-F
我的代码有什么问题?我只是想知道光标是如何工作的..提前谢谢..
【问题讨论】:
-
1-A1-A1-A是错字吗? -
只是结果集。 '-' 不是重要的符号。
-
使用游标是第一个问题。游标是在 SQL 中执行任何操作的最慢方式,除了一些非常高级的情况。你想做什么? SQL 是一种基于集合的语言。任何你想做的事情都可以通过查询来完成,而且比游标更快。
-
@aprkturk 您是否尝试拆分一个字符串?有几十个副本比光标快 10-100 倍。 SQL Server 2016 无论如何都引入了
STRING_SPLIT。 -
@aprkturk 我不认为安德鲁问的是连字符,而是你有 3 个
1-As;你想要1-A、1-B、1-C吗?
标签: sql sql-server database-cursor