日期:2014-05-18  浏览次数:20469 次

呼叫高手高手高高手,,,,,,,,
项目中数库表的备注字段原来为Text类型,长度为16

可是在存储过程里用SELECT   DISTINCT却无法应用Text类型,,,所以想把Text转换为Varchar类型,可是企业管理器会提示,可能会丢失数据,,,,

第一个问题,,我进行转换的话数据会丢失吗?

还有,,客户反映这个字段输入时只能输入很少的字数,那这个Text字段到底能存多少汉字呢,,

第二个问题,,我能用一条SQL语句,查出数据表中这个字段最大占的长度吗???



------解决方案--------------------
1.长度超过Varchar(8000) ,转换成varchar 会丢失
2。DATALENGTH
返回任何表达式所占用的字节数。

select max(DATALENGTH(textField))
from table
------解决方案--------------------
1.可以轉換成Nvarchar

2.max(datalength(字段名))
------解决方案--------------------
TEXT只是用16位字节在保存,并不是指存在的内容的长度只能为16及以下,如果你要保存的内容长度小于8000,最好就用varchar,如果会有汉字,最好用nvarchar ,TEXT类型比较麻烦,起码你以后要弄模糊查询也难呀,
至于SQL SERVER的那个警告么,只有你原有字段长度比要更新的大,就会报这个错,针对你的,因为varchar最大8000,而TEXT据说是2G以内,报错正常,如果你觉得你的内容长度不会走过8000就不要管它
------解决方案--------------------
Varchar(60),字节随内容变,最大为60字节
------解决方案--------------------
某个字段类型为Text(16)并不是说这个字段只能存和Varchar(16)一样长的8个汉字,也不是16个汉字(一个汉字两个字节,所以varchar(16)只能存8个汉字).
Text最大可存2GB的数据.一个汉字占两个字节的话就可以放2的9次方个汉字.
为什么能存放这么大的数据量呢.
"因为这些数据是单独存放的.表的数据页中,只存储指向实际数据存放地址的指针. "

如果你的 "select max(DATALENGTH(textField)) from table "得到的结果最大为110的话.
那可以放心的转成varchar(8000),它可以最多存4000个汉字呢.

------解决方案--------------------
declare @str varchar(10)
declare @str2 nvarchar(10)
---------------------------
因为括号里边是10