以下是某sql语句的查询结果:id col1 col2
1 a 111111111111111111111111111111111
2 g 22222
3 k 77777777777777777777777777777777777777777
.. .. .......
为方便打印 id col1 col2
1 a 111111111111
111111111111111111111
2 g 22222
3 k 77777777777777777777
777777777777777777777
.. .. .......
DECLARE @s varchar(2000)
DECLARE @id int,@col1 varchar(20),@col2 varchar(100)
SET @s='SELECT '
DECLARE cur CURSOR FOR
SELECT top 16 id,col1,col2 FROM test
OPEN cur
FETCH NEXT FROM cur
INTO @id, @col1,@col2WHILE @@FETCH_STATUS = 0
BEGIN
IF LEN(@col2)>15
BEGIN
SELECT @s=@s+''''+RTRIM(@id)+''','''+@col1+''','''+LEFT(@col2,15)+''' UNION ALL
SELECT NULL,NULL,'''+RIGHT(@col2,LEN(@col2)-15)+ ''' UNION ALL select'
END
ELSE
BEGIN
SELECT @s=@s+''''+RTRIM(@id)+''','''+@col1+''','''+@col2+''' UNION ALL SELECT '
ENDFETCH NEXT FROM cur
INTO @id, @col1,@col2
END
SELECT @s=LEFT(@s,LEN(@s)-16)
EXEC(@s)
CLOSE cur
DEALLOCATE cur
GO
语句中 SELECT top 16 id,col1,col2 FROM test 语句成功(但是 top 17 以后 就失败 也就是只有前16行可以执行)
换了一个表出现相似问题(到 top 25 以后 失败)
1 a 111111111111111111111111111111111
2 g 22222
3 k 77777777777777777777777777777777777777777
.. .. .......
为方便打印 id col1 col2
1 a 111111111111
111111111111111111111
2 g 22222
3 k 77777777777777777777
777777777777777777777
.. .. .......
DECLARE @s varchar(2000)
DECLARE @id int,@col1 varchar(20),@col2 varchar(100)
SET @s='SELECT '
DECLARE cur CURSOR FOR
SELECT top 16 id,col1,col2 FROM test
OPEN cur
FETCH NEXT FROM cur
INTO @id, @col1,@col2WHILE @@FETCH_STATUS = 0
BEGIN
IF LEN(@col2)>15
BEGIN
SELECT @s=@s+''''+RTRIM(@id)+''','''+@col1+''','''+LEFT(@col2,15)+''' UNION ALL
SELECT NULL,NULL,'''+RIGHT(@col2,LEN(@col2)-15)+ ''' UNION ALL select'
END
ELSE
BEGIN
SELECT @s=@s+''''+RTRIM(@id)+''','''+@col1+''','''+@col2+''' UNION ALL SELECT '
ENDFETCH NEXT FROM cur
INTO @id, @col1,@col2
END
SELECT @s=LEFT(@s,LEN(@s)-16)
EXEC(@s)
CLOSE cur
DEALLOCATE cur
GO
语句中 SELECT top 16 id,col1,col2 FROM test 语句成功(但是 top 17 以后 就失败 也就是只有前16行可以执行)
换了一个表出现相似问题(到 top 25 以后 失败)
吸取教训。 谢谢各位,结帖。
希望大虾们以后能详细些,让我们这些菜鸟少走些弯路。