SQLの同じ行に整数変数と文字列を出力する


81

さて、私はTechnetでこれに対する答えを探しましたが、役に立ちませんでした。

2つの文字列変数を連結した整数変数を出力したいだけです。

これは私のコードで、実行されません:

print 'There are ' + @Number + ' alias combinations did not match a record'

このような基本的な機能のように思えますが、T-SQLでは不可能だとは想像もできませんでした。しかし、それが不可能な場合は、そのように言ってください。正解が見つからないようです。


2
print 'There are ' + CAST(@Number AS NVARCHAR(100)) + ' alias combinations did not match a record'
ポタシン2014年

回答:


133
declare @x INT = 1 /* Declares an integer variable named "x" with the value of 1 */
    
PRINT 'There are ' + CAST(@x AS VARCHAR) + ' alias combinations did not match a record' /* Prints a string concatenated with x casted as a varchar */

キャスト方式が好きです。短くて甘く、元の変数をintとして保持します。これは必要です。

ハ、私はすぐにそれを受け入れたでしょうが、それは私をさらに6分間許しませんでした。

8

数字は文字列よりも優先されるため、もちろん、+演算子は追加する前に文字列を数字に変換する必要があります。

あなたができること:

print 'There are ' + CONVERT(varchar(10),@Number) +
      ' alias combinations did not match a record'

または、次の(かなり制限された)フォーマット機能を使用しますRAISERROR

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT

背景情報ありがとうございます。単純な印刷ステートメントを実行するときに、T-SQLが優先されることをそれほど考えていることに気づきませんでした。

1
@ AdamJ-printそれ自体はステートメントとは何の関係もありません。T-SQLは非常にシンプルで、非常に古風な言語です。T-SQLでは、演算子へのすべての入力は同じ型である必要があります。
damien_The_Unbeliever 2014年

ありがとう!SQLが70年代に作成されたことを時々忘れていると思います。SQL Serverは(私の意見では)かなり洗練された外観をしており、実際よりも現代的に見えると思います。

3

文字列と数値文字列を組み合わせることはできません。CONVERTまたはCASTを使用して、数値を文字列に変換する必要があります。

例えば:

print 'There are ' + cast(@Number as varchar) + ' alias combinations did not match a record'

または

print 'There are ' + convert(varchar,@Number) + ' alias combinations did not match a record'

2

印刷するint値とdecimal値の初期値を設定しているかどうかを再確認してください。

このサンプルは空の行を印刷しています

declare @Number INT
print 'The number is : ' + CONVERT(VARCHAR, @Number)

そして、このサンプルは印刷中です->数は:1です

declare @Number INT = 1
print 'The number is : ' + CONVERT(VARCHAR, @Number)

1

これを試してみてください、

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.