SQL存储过程参数长度问题

DECLARE@MainSqlvarchar(8000);SET@MainSql='SELECTA,B1,B2,B3FROM#1UNIONALLSELECTA,B1,B2... DECLARE @MainSql varchar(8000);
SET @MainSql =
'SELECT A,B1,B2,B3 FROM #1
UNION ALL
SELECT A,B1,B2,B3 FROM #2'
由于我代码的长度远超过8000,所以想到两个解决办法,但是都遇到点问题,请高手指教。

方法1:
把@MainSql拆分成若干个小的变量在执行
DECLARE @MainSql1 varchar(8000);
DECLARE @MainSql2 varchar(8000);
SET @MainSql1 =
'SELECT A,B1,B2,B3 FROM #1'

SET @MainSql2=
'SELECT A,B1,B2,B3 FROM #2'

EXECUTE ( @MainSql1 + @MainSql2 );
可是这样输出的结果集是两个表,我要求是一张表,请问如何解决?

方法2:
创建临时表把每个变量的结果存在临时表中
遇到的问题是,我的临时表必须动态命名,因为SELECT A,B1,B2,B3 FROM #1中的B1,B2,B3是动态取出来的,也可能叫C1,C2,C3,是我根据传入的参数在SQL查询中行转列查到的列名,要求必须输出我查到的这个列命,请问创建临时表的时候如何动态命名?即
CREAET TABLE #T
(A INT,
------动态列名称
)
展开
 我来答
szm341
2013-12-17 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5108万
展开全部
改成nvarchar(max)
追问
nvarchar(max)=nvarchar(4000),就更小了,不够。
追答
谁告诉你max=4000的?
sqlserver2005及以上版本中,max=2GB
你若是2000的话,只能拼接变量了,变量拼接是没有限制的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式