NETSID () داخل وظيفة خادم SQL
-
12-09-2019 - |
سؤال
لا بد لي من إدراج عمود مزيف نتيجة لاستعلام، وهي قيمة الإرجاع لوظيفة قيمة الجدول. يجب أن يكون نوع بيانات العمود هذا معرف فريد. أفضل طريقة (أعتقد ...) هي استخدام 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.