Ash*_*ani 0 sql sql-server cursor
虽然SELECT id, also FROM names WHERE isnull(also,'')<>''1返回了 2000+ 个结果,但以下光标没有循环,我得到:
@count = 0
Run Code Online (Sandbox Code Playgroud)
代码:
DECLARE @id BIGINT, @name NVARCHAR(1000)
DECLARE @aslo TABLE (id INT, name NVARCHAR(100))
DECLARE name_cur CURSOR FOR
(SELECT id, also
FROM names
WHERE ISNULL(also, '') <> '')
DECLARE @count INT = 0
OPEN name_cur
WHILE @@FETCH_STATUS = 0
BEGIN
SET @count = @count + 1
INSERT INTO @aslo (id, name)
SELECT @id, *
FROM string_split(@name, ',')
FETCH NEXT FROM name_cur INTO @id, @name;
END
CLOSE name_cur;
DEALLOCATE name_cur;
SELECT @count
SELECT COUNT(*) FROM @aslo a
Run Code Online (Sandbox Code Playgroud)
我认为在没有游标的情况下执行此操作要简单得多。这似乎相当于你想要做的:
INSERT INTO @aslo (id, name)
SELECT n.id, ss.value as name
FROM names n CROSS APPLY
string_split(n.name, ',') ss;
Run Code Online (Sandbox Code Playgroud)
这是一个 db<>fiddle。
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |