newid () dentro da function do servidor sql

Eu tenho que inserir uma coluna falsa no resultado de uma consulta, que é o valor de retorno de uma function de valor de tabela. Este tipo de dados da coluna deve ser um identificador exclusivo. A melhor maneira (eu acho …) é usar a function newid() . O problema é que não posso usar o newid() dentro desse tipo de function:

 Invalid use of side-effecting or time-dependent operator in 'newid()' within a function. 

aqui está uma solução inteligente:

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

que eu não posso levar crédito por. Eu encontrei aqui: http://omnibuzz-sql.blogspot.com/2006/07/accessing-non-deterministic-functions.html

-don

Você pode passar NEWID () como um parâmetro para sua function.

 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 

Chame a function assim;

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

usá-lo como padrão

 create table test(id uniqueidentifier default newsequentialid(),id2 int) insert test(id2) values(1) select * from test 

NB eu usei newsequentialid () em vez de newid () desde que newid () causará pageplits desde que não é seqüencial, veja aqui: Algum código simples para mostrar a diferença entre Newid e Newsequentialid

Você poderia usar a function ROW_NUMBER:

SELECIONAR
(ROW_NUMBER () OVER (ORDER BY recordID)) como RowNumber,
recordID,
fieldBla1
FROM tableName

Encontre mais informações em http://msdn.microsoft.com/pt-br/library/ms186734.aspx

Intereting Posts