お世話になっております。
ストアドで嵌ってしまったため質問させてください。
以下のUpdate文のストアドを作成して流しましたが型変換エラーが出ます。
■作成したストアド
ALTER PROCEDURE [dbo].[sp_update_Table] -- Add the parameters for the stored procedure here @LocalStationId int = null, @PointNo int = null, @WhichRain int = null AS DECLARE @sqlstr NVARCHAR(max), @setstr NVARCHAR(max), @paramstr NVARCHAR(max) BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Not Update Data if @LocalStationId is null return -1; -- Set Update Table and condition SET @sqlstr = 'UPDATE Table {setstring} where LocalStationId = @LocalStationId'; SET @setstr = ''; if @PointNo is not null SET @setstr = @setstr + ' PointNo = @PointNo,'; if @WhichRain is not null SET @setstr = @setstr + ' WhichRain = @WhichRain,'; -- Delete last comma IF RIGHT(@setstr, 1) = ',' SET @setstr = LEFT(@setstr, LEN(@setstr) - 1); SET @setstr = 'SET' + RTRIM(@setstr); SET @sqlstr = REPLACE(@sqlstr, '{setstring}', @setstr); -- UPDATE SQL Text execute SET @paramstr = N' @LocalStationId int , @PointNo int , @WhichRain int '; EXECUTE sp_executesql @sqlstr , @paramstr , @LocalStationId = @LocalStationId , @PointNo = @PointNo , @WhichRain = @WhichRain; return @@rowcount;
■ストアド実行時
DECLARE @return_value int EXEC @return_value = [dbo].[sp_update_LSWeatherMeas] @LocalStationId = 1, @PointNo = 669, @WhichRain = NULL SELECT 'Return Value' = @return_value
■ストアド実行結果
メッセージ 8114、レベル 16、状態 5、行 2
データ型 nvarchar を int に変換中にエラーが発生しました。
参考にしたサイト(と言うか丸パクリに近い・・・)
UPSERTストアドサンプル
何となく凡ミスな雰囲気のエラーなのですが
どうにも自分では解決できていません。
皆様のお知恵を頂ければ幸いです。
宜しくお願い致します。
追記
SQLServer2017
Management Studio
を使用しています。
追記 2
ご指摘のテーブル作成クエリを追記します。
CREATE TABLE [dbo].[Table]( [LocalStationId] [int] NOT NULL, [PointNo] [int] NULL, [WhichRain] [int] NULL ) ON [PRIMARY] GO
URLは https://teratail.com/help/question-tips#questionTips3-7 の [リンク] で
[リンク先の説明](http...) に修正してください。
リンク表示の修正を行いました。
宜しくお願い致します。
SQL中で使っているテーブルのCREATE TABLE も質問にあった方がいいのでは?
>参考にしたサイト(と言うか丸パクリに近い・・・)
サイトのコードをそのまま実行したら正常に動作しますか?
テーブルのCREATE文を追記しました。
全くそのまま、ではないのですが類似テーブル、ストアドを作成した際には動いていました。が、テストで動いたので早々に破棄してしまい、現存はしていません・・・。
よくCREATE TABLEしたユーザーとストアドを実行したユーザーが違うとか、初歩的なミスがあるものです。
初心に戻って、URLをもう一度コピーしてやってみるのも近道かもしれません。
ありがとうございます。もう一度新しいテーブル、ストアドを作って初心に帰ってみます。ありがとうございます。