sql建表字段太多怎么办

sql建表字段太多怎么办,第1张

今天数据库建表的时候出现如下错误

“Patient_Profile”表

- 无法创建表。

创建或更改表 'Patient_Profile' 失败,因为最小行大小是 16082,包括 11 字节的内部开销。而此值超出了允许的 8060 字节的最大表行大小。

上面的错误提示:在创建表的时候有三种类型(binary、char、nchar 暂时只测试了这三种类型有这个问题),每种的长度总和(加上内部开销)不能 *** 作8060

比如以下测试数据

declare @temp table

(

column1 binary(4000),

column2 binary(4000),

column3 binary(4000)

)

--执行出错,因为这个表里Binary类型的总长度12000+11(内部开销)大于了8060

declare @temp table

(

column1 binary(4000),

column2 binary(4000),

column3 nvarchar(4000)

)

--执行成功,Binary总大小为8000,Nvarchar大小为4000

出现这种情况,需改下数据字段大小即可,也可以Binary改成VarBinary、Char或Nchar改成Varchar/Nvarchar、。请注意是::这三种类型中,每种类型的总长度+开销不能多于8060。而并不是所有长度

-- test_a是A表,test_b是B表,则把触发器建立在test_b(即你所说的B表),脚本如下:

create trigger tr_test_b

on test_b

after update,insert

as

begin

    if update(c)

 begin

   if (select c from inserted)=5

   begin

      delete from test_a where a in(select a from test_b);

   end

 end

end

这个在数据库的方面是不能限制的 你想想一个int的就是-2147483648 - 2147483647这么大 你在限制到100啊 所以在数据库定义类型是限制是不可取的 在程序或是用SQL的语句限制啊!

你的采纳是我前进的动力,

记得好评和采纳,答题不易,互相帮助,

手机提问的朋友在客户端右上角评价点(满意)即可

如果你认可我的回答,请及时点击(采纳为满意回答)按钮!!

用odbc向数据库写入二进制数据的问题2009年02月05日 星期四 15:34odbc/mfc 向mysql 写入二进制数据的问题

发表于:2008-10-21 18:01:33 楼主

问题描述:

向mysql添加其它类型的数据都没问题,当添加二进制数据,例如一个,程序执行正常但实际上并没有添加进去。

奇怪的是:我用mysql 的C API 向数据库中添加该后,使用 odbc/mfc 却可以很好的把它读出来。

添加二进制文件的示例代码如下:

其中rs 为结果集;m_data 的类型为CLongBinary

CFileStatus fileStatus;

CFile fp("viewppjpg",CFile::modeRead);

fpGetStatus(fileStatus);

Cnctable rs=new Cnctable(mbase);

rs->Open(CRecordset::snapshot);

rs->AddNew();

rs->m_datam_hData = ::GlobalAlloc(GPTR ,(size_t)fileStatusm_size);

size_t temps= fpRead(rs->m_datam_hData,fileStatusm_size);

rs->m_datam_dwDataLength = fileStatusm_size;

rs->SetFieldNull(&rs->m_data,FALSE);

rs->Update();

注:使用的odbc驱动为351

如有解答不胜感激。

发表于:2008-10-23 15:43:024楼 得分:0

问题已经解决,感谢各位的回答,

下面是翻阅MSDN 使用CByteArray解决上述问题,

具体原因不明,可能是兼容性问题。

代码如下:

m_data 的类型由CLongBinary 改为CByteArray;同时修改DoFieldExchange中对应的内容

CFileStatus fileStatus;

CFile fp("viewppjpg",CFile::modeRead);

fpGetStatus(fileStatus);

Cnctable rs=new Cnctable(mbase);

rs->Open(CRecordset::snapshot);

rs->AddNew();

rs->m_datam_hData = ::GlobalAlloc(GPTR ,(size_t)fileStatusm_size);

rs->m_datam_dwDataLength = fileStatusm_size;

------------------------------下面是改动的地方----------

nct->m_dataSetSize(fileStatusm_size);

fpRead(nct->m_dataGetData(),fileStatusm_size);

nct->Update();

如果是知道了字段名称中的部分字符(例如有字段‘部门’,你已知‘部’),可以用以下方法获得完整的字段名以及它所在的表。

USE KETTLE--数据库名称

SELECT aname AS TableName, bname AS ColumnName FROM sysobjects a

INNER JOIN syscolumns b ON aid=bid

WHERE atype='U' AND bname LIKE '%部%'

太多是多少?

==========

一般说来没什么大的影响。如果用select 来查可能会慢一些。内存消耗大些。

查询数据快慢主要还是取决于数据总量及sql语句本身。有没有建立索引,写的sql能否用到索引等等。

以上就是关于sql建表字段太多怎么办全部的内容,包括:sql建表字段太多怎么办、数据库表A中的数据量太大,想自动删除数据根据表B中某个字段的值来自动删除。请问用触发器咋写、mysql数据库字段的取值范围设置过大有没有什么影响等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10185397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存