クエリの結果に偽の列を挿入する必要があります。これは、テーブル値関数の戻り値です。この列のデータ型は一意の識別子である必要があります。最善の方法(と思う...)は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-non-deterministic-functions.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 newid()はシーケンシャルではないのでページ分割を引き起こすため、newid()の代わりにnewsequentialid()を使用しました。ここを参照してください: NewidとNewsequentialidの違いを示す簡単なコード