问题描述
今天回过头来看这个语句,感觉一些迷惑--动态SQL,指一个公司的值个数不定。declare@sqlvarchar(8000)set@sql='selectm.code,m.name'这里作为一个字符串select@sql=@sql+',max(casepxwhen'''+cast(pxasvarchar)+'''thenlinknameelse''''end)[linkname'+cast(pxasvarchar)+']'from(selectdistinctpxfrom(selectpx=(selectcount(1)fromtbwherecode=t.codeandlinkname<t.linkname)+1,*fromtbt)o)asa--为什么这里没有作为一个sql字符串呢set@sql=@sql+'fromtam,(selectpx=(selectcount(1)fromtbwherecode=t.codeandlinkname<t.linkname)+1,*fromtbt)nwherem.code=n.codegroupbym.code,m.name'exec(@sql)
解决方案
解决方案二:
在存储过程里吧
解决方案三:
看起来有点乱
解决方案四:
引用楼主sex_pig的帖子:
今天回过头来看这个语句,感觉一些迷惑--动态SQL,指一个公司的值个数不定。declare@sqlvarchar(8000)set@sql='selectm.code,m.name'这里作为一个字符串因为前面是一个“select”,而不是“set”将这个变量@sql和后面的sql语句组成了一个完整的sql语句,通过存储过程执行select@sql=@sql+',max(casepxwhen'''+cast(pxasvarchar)+'''thenlinknameelse''''end)[linkname'+cast(pxasvarchar)+']'from(selectdistinctpxfrom(selectpx=(selectcount(1)fromtbwherecode=t.codean…
解决方案五:
明白么?select将这个变量@sql和后面的sql语句组成了一个完整的sql语句,通过存储过程执行
解决方案六:
你是在拼接字符串吗?讲清楚点
解决方案七:
不过这段代码应该可以在查询分析器里执行,跟在存储过程里执行一样的
时间: 2024-09-14 10:28:23