テーブルの TIMESTAMP フィールドを文字列に変換して、動的 SQL の一部として出力または実行できるようにしようとしています。SSMS はそれを行うことができるため、それを行うための組み込みメソッドが必要です。ただし、T-SQL を使用して動作させることはできません。
以下は、表の結果を正しく表示します。
SELECT TOP 1 RowVersion FROM MyTable
を示しています0x00000000288D17AE
。ただし、結果をより大きな文字列の一部にする必要があります。
DECLARE @res VARCHAR(MAX) = (SELECT TOP 1 'test' + CONVERT(BINARY(8), RowVersion) FROM MyTable)
PRINT(@res)
これによりエラーが発生します。The data types varchar and binary are incompatible in the add operator
DECLARE @res VARCHAR(MAX) = (SELECT TOP 1 'test' + CONVERT(VARCHAR(MAX), RowVersion) FROM MyTable)
PRINT(@res)
これにより、ガベージ文字が発生します。test (®
実際、スペースは単なるヌル文字であり、 を使用して動的 SQL を実行する目的で文字列を終了しますEXEC()
。
DECLARE @sql VARCHAR(MAX) = 'SELECT TOP 1 ''test'' + CONVERT(VARCHAR(MAX), RowVersion) FROM MyTable'
EXEC (@sql)
これは、「test」という単語を含む表の結果を表示するだけです。CONVERT
関数は最初に終端の null 文字を返すため、動的 SQL の「test」以降はすべて切り取られます。
明らかに、結果の文字列を「test0x00000000288D17AE」または10進数に相当するものにしたいのですが、この場合は「test680335278」になります。
どんなアイデアでも大歓迎です。