2017-05-02 30 views
0

このように多くの質問がありますが、ほぼすべてのソリューションを試しましたが、まだそのコードを使用できません。 「やっメートル - 。私はループカウンタとしてそれを使用して行を削除できるように、テーブルの行数を見つけようとしているvarcharをINTに変換するときに変換が失敗しました

@rc INT、 @tbnameはVARCHAR(500) と@idですまたINTです

これは私のクエリです:

set @rc='select count(*) from dbo.[' + @tbname + '] where id = ' + @id 

私はまた、これらを試してみました:

set @rc='select cast(count(*) as varchar) from dbo.[' + @tbname + '] where id = ' + @id 

set @rc='select count(*) from dbo.[' + @tbname + '] where id = ' + cast(@id as varchar) 

そして、ここにも、そこにキャストを配置するいくつかのより多くの順列を。私も@rcの宣言をvarcharとして変更しようとしましたが、同じエラーが表示されます。あなたは単に*変数に* * *文字列を割り当てることを期待

+2

は、文字列が*実行されたクエリと*として考慮させなければなりませんか?それは非常に驚くべき言語になります。 –

+0

これは、使用する必要のある方法です。 http://stackoverflow.com/questions/803211/how-to-get-sp-executesql-result-into-a-variable質問を投稿してください。 –

+0

申し訳ありませんが、私は追加しませんでした。次の行 – mathB

答えて

1

この場合、使用sp_executesqlを、

DECLARE @retval int 
    DECLARE @sSQL nvarchar(500); 
    DECLARE @ParmDefinition nvarchar(500); 

    DECLARE @rc   INT 
      ,@str  NVARCHAR(MAX) 
      ,@tbname NVARCHAR(500) = 'Table1' 
      ,@id  int 

    set @str='select @rcOut = count(*) from dbo.[' + @tbname + '] where id = ' + CAST(@id as NVARCHAR) 


    EXEC sp_executesql @str, N'@rcOut int OUTPUT',@rcOut = @rc OUTPUT; 

    SELECT @rc; 
+0

ありがとうございます。 1時間前に別の答えがありました。これに似た何かが、私はそれを使用することができました。それがなぜ削除されたのか分かりません。 – mathB

+1

これは、このシナリオでは正しい方法です。tempを作成する必要はありません。表。 – SHD