سؤال

لا بد لي من إدراج عمود مزيف نتيجة لاستعلام، وهي قيمة الإرجاع لوظيفة قيمة الجدول. يجب أن يكون نوع بيانات العمود هذا معرف فريد. أفضل طريقة (أعتقد ...) هي استخدام newid() وظيفة. المشكلة هي، لا أستطيع استخدامها newid() داخل هذا النوع من الوظائف:

Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
هل كانت مفيدة؟

المحلول

إليك حل ذكي:

create view getNewID as select newid() as new_id

create function myfunction ()
returns uniqueidentifier
as begin
   return (select new_id from getNewID)
end

أنني لا أستطيع أن تأخذ الائتمان ل. لقد وجدت هنا:http://omnibuzz-sql.blogspot.com/2006/07/ACCESSING-N-DETERMINISTISTION.HTML.

-اتشح

نصائح أخرى

يمكنك تمرير NewID () كمعلمة إلى وظيفتك.

CREATE FUNCTION SOMEIDFUNCTION
(
    @NEWID1 as varchar(36), @NEWID2 as varchar(36)
)
RETURNS varchar(18)
AS
BEGIN
    -- Do something --
    DECLARE @SFID varchar(18)
    SELECT @SFID = 'DYN0000000' + LOWER(LEFT(@NEWID1,4)) + LEFT(@NEWID2,4) 
    RETURN @SFID
END
GO

استدعاء الوظيفة مثل هذا؛

SELECT dbo.SOMEIDFUNCTION(NewID(),NewID())

استخدمه كإعداد افتراضي بدلا من ذلك

create table test(id uniqueidentifier default newsequentialid(),id2 int)

insert test(id2) values(1)

select * from test

NB استخدمت NEWSENTIONITIONID () بدلا من NETSID () منذ NewID () تسبب البشرات لأنها ليست متتابعة، انظر هنا: بعض التعليمات البرمجية البسيطة لإظهار الفرق بين NewID وجديدة

يمكنك استخدام وظيفة ROW_NUMBER:

تحديد
(ROW_NUMBER () أكثر (ترتيب من خلال التسجيل)) كملاعب،
مسجل،
fieldbla1.
من tableName.

العثور على مزيد من المعلومات في http://msdn.microsoft.com/pt-br/library/ms186734.aspx.

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