Get bytes from a varchar
[word] is varchar(600)
以下代码的问题是它总是检索 30 个字节。
如果 [word] 长于 30,则字节被截断。
如果 [word] 短于 30,则将其填充为 0。
如何检索实际的字节数。
是的,我真的需要 [word] 的字节。
5 个标签的限制:SQL 2008 R2、C#
SqlCommand sqlCmd = sqlCon.CreateCommand();
System.Data.SqlTypes.SqlBytes charSB;
byte[] charB;
Int32 id;
sqlCmd.CommandText = "select [ID], cast(Rtrim([word]) as binary), [word] " +
"from [FTSwordDef] with (nolock) order by [word];";
SqlDataReader rdr = sqlCmd.ExecuteReader();
while (rdr.Read())
{
id = rdr.GetInt32(0);
charSB = rdr.GetSqlBytes(1);
charB = charSB.Value;
stringByte1252s.Add(new StringByte1252(id,charB));
}
rdr.Close();
这有效
select top 10000 [ID], cast(Rtrim([word]) as binary(4)), len([word])
from [FTSwordDef] with (nolock) order by [word]
但是我不能传递 len([word]) 因为二进制
Varbinary 的大小会引发相同的错误
以下引发错误
msg 102, Level 15, State 1, Line 1 Incorrect syntax near '('. Msg 319, Level 15 ,状态 1,第 2 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。
select top 10000 [ID], cast(Rtrim([word]) as binary( len([word]) )), len([word])
from [FTSwordDef] with (nolock) order by [word]