动态查询统计的问题...语句超出限制长度.仍未解决,急...
以下是我自定义的存储过程, 采用动态语句查询统计...
CREATE PROCEDURE dbo.u_dt_tl_msdqfbtj
--通路门市地区分布统计
/*
通路 1 2.....12 合 计
好又多 T1 T2 T12 TB-TT
家乐 C1 C2 Cn TC-TT
. . . . .
. . . . .
. . . . .
*/
AS
SELECT msdm, lsdq AS dqdm, tlmc INTO #t FROM hcszhmc WHERE tlmc IS NOT NULL
--通路门市地区分布统计
----------------------------------------------------------------------------------
--/*
DECLARE @SQL VARCHAR(8000)
DECLARE @tsql VARCHAR(8000)
SET @sql = 'select dqdm as ''地区'''
--生成动态列
SELECT @sql = @sql + ', SUM(CASE tlmc WHEN ''' + CAST(tlmc AS NVARCHAR(30)) + ''' THEN 1 ELSE 0 END) AS [' + CAST(tlmc AS NVARCHAR(30)) + ']' FROM (SELECT DISTINCT TLMC FROM #t) AS a
SET @sql = @sql + ', SUM(CASE WHEN tlmc IS NOT NULL THEN 1 ELSE 0 END) AS 合计 FROM #t GROUP BY DQDM'
PRINT @SQL
SET @tsql = ' UNION SELECT ''合计'''
--生成动态列
SELECT @tsql = @tsql + ', SUM(CASE tlmc WHEN ''' + CAST(tlmc AS NVARCHAR(30)) + ''' THEN 1 ELSE 0 END) AS [' + CAST(tlmc AS NVARCHAR(30)) + ']' FROM (SELECT DISTINCT TLMC FROM #t) AS a
SET @tsql = @tsql + ', SUM(CASE WHEN tlmc IS NOT NULL THEN 1 ELSE 0 END) AS 合计 FROM #t'
--SET @sql = @sql + @tsql
EXEC(@sql)
--*/
----------------------------------------------------------------------------------
go
在 通路(tlmc) (用于指示某家门市属于某个类别) 比较少的情况下...@sql 语句不会超出 3999, 存储过程得已正确执行..现在 通路(tlmc) 类别多于 80 几个的时候, @sql 字符串被截断掉, 导致 sql 语句不完整, 无法执行...:(
我已经有发过一贴来讨论, 地址在
http://expert.csdn.net/Expert/TopicView1.asp?id=2295919
如果我用Delphi中动态生成, 势必加重编写工作量, 另外, 在提交到服务器时, 可能还要进行 UTF-8 编码转换, 这点我又还没掌握..
所以, 我想请大虾帮我想想看能不能用 SQL 中的 ntext 数据类型来替代, 考虑到将来可能会增加到 100 个通路以上..8000 的字符可能也不够用 :(