今天数据库建表的时候出现如下错误
“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数据库字段的取值范围设置过大有没有什么影响等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)