newid () dans la fonction sql server
je dois insérer une fausse colonne au résultat d'une requête, qui est la valeur de retour d'une fonction table-value. Ce type de données de colonne doit être unique identificateur. La meilleure façon (je pense...) est d'utiliser newid()
fonction. Le problème est que je ne peux pas utiliser newid()
dans ce type de fonction:
Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
4 réponses
voici une solution intelligente:
create view getNewID as select newid() as new_id
create function myfunction ()
returns uniqueidentifier
as begin
return (select new_id from getNewID)
end
Je ne peux pas m'en attribuer le mérite. je l'ai trouvé ici: http://omnibuzz-sql.blogspot.com/2006/07/accessing-non-deterministic-functions.html
-ne
vous pouvez passer NEWID () comme paramètre à votre fonction.
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
Appeler la fonction comme ceci:
SELECT dbo.SOMEIDFUNCTION(NewID(),NewID())
utiliser comme un défaut à la place
create table test(id uniqueidentifier default newsequentialid(),id2 int)
insert test(id2) values(1)
select * from test
NB j'ai utilisé newsequentialid() au lieu de newid() depuis newid() entraîner pagesplits car il n'est pas séquentielle, voir ici: Un Code Simple Pour Montrer La Différence Entre Newid Et Newsequentialid
vous pouvez utiliser la fonction ROW_NUMBER:
sélectionner
(ROW_NUMBER () OVER (ORDER BY recordID) ) as RowNumber ,
recordID,
fieldBla1
De tableName
pour en savoir plus, allez à http://msdn.microsoft.com/pt-br/library/ms186734.aspx