سؤال

وأريد تحديث عمود جدول باستخدام نتائج إجراء مخزن

create procedure seq
as
DECLARE @NextValue INT;
INSERT SequencesTable DEFAULT VALUES;
DELETE SequencesTable WITH(READPAST); 
SELECT SCOPE_IDENTITY();
go

وأنا لا يمكن استخدام UDF لأنه nodeterministic. وشيء من هذا القبيل لا تعمل

UPDATE [dbo].[t1]     SET [c1] = seq

ولدي شعور أنا يقترب هذا بطريقة خاطئة.

وأريد فقط أن تفعل تحديث جدول يشبه هذا

1 1
2 2
1 4
1 4
5 5
1 2

لتبدو مثل هذا

1 1
2 2
3 4
4 4
5 5
6 2

هل كانت مفيدة؟

المحلول

وحاول شيئا من هذا القبيل:

update a set c1 = c1_new
from (
  select 
    c1, c2
  , c1_new = row_number() over (order by nullif(c1,c1))
  from dbo.t1
  ) a

وحول اللعب مع الاستعلام الداخلي حتى تحصل على ما تريد، ثم تطبيق التحديث.

ووNULLIF (C1، C1) يحاول الحفاظ على النظام الأصلي على القرص. وتعود دائما فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top