4

私はこのクエリを持っています:

DECLARE @selectsql nvarchar(4000),
DECLARE @cnt int

select @selectsql = ' SELECT ' + @cnt + '= COUNT(*) FROM Vwbckup' 

print @selectsql
print @cnt

EXEC sp_executesql @selectsql

クエリを実行すると、次のエラーが発生します。

varchar 値 ' SELECT ' をデータ型 int に変換するときに変換に失敗しました。

4

3 に答える 3

8

@cnt変数の型はINTです。連結するには、NVARCHARにキャストする必要があります。

DECLARE @selectsql nvarchar(4000),
DECLARE @cnt int

SELECT @selectsql = N' SELECT ' + CAST(@cnt AS NVARCHAR(10)) + N'= COUNT(*) FROM Vwbckup' 

さらに、 Unicode()文字列を示すために文字列リテラルの前にプレフィックスを付ける必要がありますNNVARCHAR

更新:その前のコマンドは実際にはまったく意味がありません....このコマンド文字列を作成するつもりでしたか?

SELECT @selectsql = N' SELECT @cnt = COUNT(*) FROM Vwbckup' 

そしてそれを実行しますか?

于 2012-11-28T14:16:22.093 に答える
1

これには明らかに動的SQLは必要ありませんが、表示されていない何らかの理由で必要な場合は、その部分を連結する必要はまったくありません。パラメータを使用できOUTPUTます。

DECLARE @selectsql NVARCHAR(4000),
        @cnt       INT

SELECT @selectsql = N'SELECT @cnt = COUNT(*) FROM Vwbckup'

PRINT @selectsql

PRINT @cnt

EXEC sp_executesql
  @selectsql,
  N'@cnt int output',
  @cnt OUTPUT

SELECT @cnt 
于 2012-11-28T14:20:52.413 に答える
0

を文字列に連結するint=>キャストする

問題は、SQLが実行されているときではなく、文字列と整数変数を連結しているために生成される前です。

整数変数をキャストする必要があります。

select @selectsql = 'SELECT ' + cast(@cnt as nvarchar) + ' = COUNT(*) FROM Vwbckup'

しかし、変数の値が結果の文字列に連結されることに気づきます。あなたがそれを望んでいるかどうかはわかりません...

于 2012-11-28T14:16:33.010 に答える