sql server - longitud - newid() dentro de la función de servidor sql
uniqueidentifier longitud (4)
Puede pasar NEWID () como parámetro a su función.
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
Llame a la función de esta manera;
SELECT dbo.SOMEIDFUNCTION(NewID(),NewID())
Tengo que insertar una columna falsa en el resultado de una consulta, que es el valor de retorno de una función de valor de tabla. Este tipo de datos de columna debe ser unique-identifier. La mejor manera (creo ...) es usar la función newid()
. El problema es que no puedo usar newid()
dentro de este tipo de función:
Invalid use of side-effecting or time-dependent operator in ''newid()'' within a function.
Puede usar la función ROW_NUMBER:
SELECCIONAR
(ROW_NUMBER () OVER (ORDER BY recordID)) como RowNumber,
recordID,
fieldBla1
FROM tableName
Encuentre más información en http://msdn.microsoft.com/pt-br/library/ms186734.aspx
aquí hay una solución 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 no me puedo atribuir el mérito. Lo encontré aquí: http://omnibuzz-sql.blogspot.com/2006/07/accessing-non-deterministic-functions.html
-don
usarlo como un valor predeterminado en su lugar
create table test(id uniqueidentifier default newsequentialid(),id2 int)
insert test(id2) values(1)
select * from test
NB Usé newsequentialid () en lugar de newid () ya que newid () causará particiones de páginas ya que no es secuencial, mira aquí: Algunos códigos simples para mostrar la diferencia entre Newid y Newsequentialid