然后不停的循环(用union all合并表)
到某时刻,系统告诉我执行错误,我把@sql打出来一看,也就几百个字符,就截断了,请问高手如何解决,感激不尽。
4 个解决方案
#1
char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型。
char[(n)]
长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
固定长度 (char) 或可变长度 (varchar) 字符数据类型。
char[(n)]
长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
#2
如果真的超過了8000,你就隻能定義多個變量了,text類型不支持變量定義。
ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。
ntext
可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。
text
服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。
image
可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。
ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。
ntext
可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。
text
服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。
image
可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。
#3
exec(@sql1+@sql2+...+@sqln)
#4
以下是我执行的过程(模仿邹建兄合并多个数据库的例子),中间那段语句加长就不行了
CREATE PROC P_SCM_XMNR_H AS
declare @sql char(8000)
set @sql = ''
select @sql = @sql + '
select 编号=fld_xysbh
,产品名称=max(case when fld_zh=1 and fld_th=1 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,产品型号=max(case when fld_zh=1 and fld_th=2 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,功能=max(case when fld_zh=1 and fld_th=4 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
。。。。。。。。。。。。。。。。。。。。。
from xys.dbo.'
+ name + ' group by fld_xysbh' + ' union all '
from xys.dbo.sysobjects where xtype='u' and name like 'tab[_]xmnr%'
if len(@sql) > 10
begin
set @sql = left(@sql, len(@sql) - 10)
exec(@sql)
end
print @sql
GO
CREATE PROC P_SCM_XMNR_H AS
declare @sql char(8000)
set @sql = ''
select @sql = @sql + '
select 编号=fld_xysbh
,产品名称=max(case when fld_zh=1 and fld_th=1 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,产品型号=max(case when fld_zh=1 and fld_th=2 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,功能=max(case when fld_zh=1 and fld_th=4 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
。。。。。。。。。。。。。。。。。。。。。
from xys.dbo.'
+ name + ' group by fld_xysbh' + ' union all '
from xys.dbo.sysobjects where xtype='u' and name like 'tab[_]xmnr%'
if len(@sql) > 10
begin
set @sql = left(@sql, len(@sql) - 10)
exec(@sql)
end
print @sql
GO
#1
char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型。
char[(n)]
长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
固定长度 (char) 或可变长度 (varchar) 字符数据类型。
char[(n)]
长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
#2
如果真的超過了8000,你就隻能定義多個變量了,text類型不支持變量定義。
ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。
ntext
可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。
text
服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。
image
可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。
ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。
ntext
可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。
text
服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。
image
可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。
#3
exec(@sql1+@sql2+...+@sqln)
#4
以下是我执行的过程(模仿邹建兄合并多个数据库的例子),中间那段语句加长就不行了
CREATE PROC P_SCM_XMNR_H AS
declare @sql char(8000)
set @sql = ''
select @sql = @sql + '
select 编号=fld_xysbh
,产品名称=max(case when fld_zh=1 and fld_th=1 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,产品型号=max(case when fld_zh=1 and fld_th=2 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,功能=max(case when fld_zh=1 and fld_th=4 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
。。。。。。。。。。。。。。。。。。。。。
from xys.dbo.'
+ name + ' group by fld_xysbh' + ' union all '
from xys.dbo.sysobjects where xtype='u' and name like 'tab[_]xmnr%'
if len(@sql) > 10
begin
set @sql = left(@sql, len(@sql) - 10)
exec(@sql)
end
print @sql
GO
CREATE PROC P_SCM_XMNR_H AS
declare @sql char(8000)
set @sql = ''
select @sql = @sql + '
select 编号=fld_xysbh
,产品名称=max(case when fld_zh=1 and fld_th=1 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,产品型号=max(case when fld_zh=1 and fld_th=2 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,功能=max(case when fld_zh=1 and fld_th=4 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
。。。。。。。。。。。。。。。。。。。。。
from xys.dbo.'
+ name + ' group by fld_xysbh' + ' union all '
from xys.dbo.sysobjects where xtype='u' and name like 'tab[_]xmnr%'
if len(@sql) > 10
begin
set @sql = left(@sql, len(@sql) - 10)
exec(@sql)
end
print @sql
GO