nvarchar(max)タイプのテーブルセルがあり、通常は次のようになります。A03 B32 Y660 P02
たとえば、文字の後に数字が続き、スペースで区切られます。私がやりたいのは、SQLプロシージャでこれらすべての数値の合計を取得することです。他の言語ではかなり単純なことですが、私はSQLにかなり慣れていないだけでなく、文字列をいじるのはかなり不器用な言語のように思えます。とにかく、私はそれがこのようになると思います:
1)一時テーブルを作成し、分割関数を使用して入力します
2)すべてのセルの最初の文字を削除します
3)データをintに変換します
4)上記の一時テーブルの合計に設定されたターゲットtable.columnを更新します。
だから私はこれまでに到達しました:
CREATE PROCEDURE [dbo].[SumCell] @delimited nvarchar(max), @row int
AS
BEGIN
declare @t table(data nvarchar(max))
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,' ','</r><r>') + '</r></root>'
insert into @t(data)
select
r.value('.','varchar(5)') as item
from @xml.nodes('//root/r') as records(r)
UPDATE TargetTable
SET TargetCell = SUM(@t.data) WHERE id = @row
END
明らかに、最初の文字の除去とint部分への変換が欠落しており、その上に、「スカラー変数@tを宣言する必要があります」というエラーが発生します...