SQL Server 2012 を使用しています。
処理のためにテーブルから行を選択する必要があります。行数は可変である必要があります。選択している行を「処理中」ステータスに更新する必要があります。この目的のために入力する GUID があります。
row_number() を使用するいくつかの例と、CTE を使用する方法のいくつかの例に遭遇しましたが、それらを組み合わせる方法 (またはそれが正しい戦略であるかどうか) についてはわかりません。洞察をいただければ幸いです。
これが私がこれまでに持っているものです:
DECLARE @SessionGuid uniqueidentifier, @rowcount bigint
SELECT @rowcount = 1000
SELECT @sessionguid = newid()
DECLARE @myProductChanges table (
ProductChangeId bigint
, ProductTypeId smallint
, SourceSystemId tinyint
, ChangeTypeId tinyint );
WITH NextPage AS
(
SELECT
ProductChangeId, ServiceSessionGuid,
ROW_NUMBER() OVER (ORDER BY ProductChangeId) AS 'RowNum'
FROM dbo.ProductChange
WHERE 'RowNum' < @rowcount
)
UPDATE dbo.ProductChange
SET ServiceSessionGuid = @sessionguid, ProcessingStateId = 2, UpdatedDate = getdate()
OUTPUT
INSERTED.ProductChangeId,
INSERTED.ProductTypeId,
INSERTED.SourceSystemId,
INSERTED.ChangeTypeId
INTO @myProductChanges
FROM dbo.ProductChange as pc join NextPage on pc.ProductChangeId = NextPage.ProductChangeId
ここから、一時テーブルから選択してデータを返します。
SELECT mpc.ProductChangeId
, pt.ProductName as ProductType
, ss.Name as SourceSystem
, ct.ChangeDescription as ChangeType
FROM @myProductChanges as mpc
join dbo.R_ProductType pt on mpc.ProductTypeId = pt.ProductTypeId
join dbo.R_SourceSystem ss on mpc.SourceSystemId = ss.SourceSystemId
join dbo.R_ChangeType ct on mpc.ChangeTypeId = ct.ChangeTypeId
ORDER BY ProductType asc
これまでのところ、これは私にはうまくいきません。実行しようとするとエラーが発生します。
Msg 8114, Level 16, State 5, Line 20
Error converting data type varchar to bigint.
私が間違っていることについてははっきりしていません - だから - どんな助けも大歓迎です。
ありがとう!
ところで、これを試して解決するために参照として使用した質問のいくつかを次に示します。
https://stackoverflow.com/questions/9777178