我想做一个行转列的,我已知列有8列。下图是我的语法,结果只返回来了一列。
加了top之后,我想要的数据就出来了
看起来对数据库基本了解不多,top是记录指针的位置,它代表第一条记录。
如果你读过sql表文件,记录指针位置发生改变,或不知道记录指针现在指向那条记录,用top,表示从头也就是第一条记录的位置开始读记录 不用top就是从当前位置开始读,当然有些命令是默认从头开始读,这个时候用不用都一样,有些默认从当前位置开始读,必须加,否则得到结果不完整。
不加top就是选择全部,不会比加了top的更少。你这情况无法重现。
可能是选中了不同的数据库?
使用select @变量=xxx from table 的方式给变量赋值时,只赋值第一行记录给变量,所以你不加top的方式就是只有一个。加了top关键字会循环指定行数赋值。如果不加top关键字,可以加一个变量来拼接。比如 declare @cols nvarchar(max) set @cols=(select ',case when xxx='''+left(val,10) then '['+left(val,10) +'] else null end' from table where id=@id for xml path('')) 然后进行拼接。
你把打印出来得语句发出来,仔细检查,包括看看连正式还是测试库。
你说得这种问题是不存在的。
该用高级语言做的工作就用高级语言做
什么动态拼接sql这种问题你也用sql本身来做,连调试都没法调