7

フィールドを持つ SQL Server 2008 R2 テーブルがありnvarchar(4000)ます。

このテーブルを格納するデータは次のようになります

'696D616765206D61726B65643A5472'

また

'303131' ("011").

各文字が 16 進数にエンコードされていることがわかります。

これらのデータをテーブルから読み取るにはどうすればよいですか? デコード関数を書きたくありません。つまり、より簡単な方法が存在します。

PS私の英語でごめんなさい。

4

2 に答える 2

4

実際、SQL Server 2008 には 16 進エンコードおよびデコード機能が組み込まれています。

サンプル (文字列を VarBinary に変換するときの値が「1」の 3 番目のパラメーターに注意してください):

DECLARE @ProblemString VarChar(4000) = '54657374'
SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1))

参照: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

このアプローチの利点は、特にインジェクションを恐れて、通常は避けようとする「Exec」呼び出しが必要ないことです。欠点は、SQL Server 2008 以降でしか機能しないことです。

于 2011-06-07T12:36:56.153 に答える
2

私が思うに、最も単純なデコード関数が必要になります。

declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472'

exec('SELECT CONVERT(varchar(max),0x' + @fld + ')')

---------------
image marked:Tr
于 2011-06-07T10:09:42.933 に答える