58

クエリの結果に偽の列を挿入する必要があります。これは、テーブル値関数の戻り値です。この列のデータ型はunique-identifierである必要があります。最良の方法(私は思う...)はnewid()関数を使うことです。問題は、newid()このタイプの関数内では使用できないことです。

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

4 に答える 4

20

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())
于 2012-09-12T23:57:53.540 に答える
5

代わりにデフォルトとして使用してください

create table test(id uniqueidentifier default newsequentialid(),id2 int)

insert test(id2) values(1)

select * from test

注意: newid () はシーケンシャルではないため、ページ分割が発生するため、newid() の代わりに newsequentialid() を使用しました。

于 2009-04-21T13:16:50.263 に答える
-6

ROW_NUMBER 関数を使用できます。

SELECT
(ROW_NUMBER() OVER (ORDER BY recordID) ) as RowNumber ,
recordID,
fieldBla1
FROM tableName

詳細については、http://msdn.microsoft.com/pt-br/library/ms186734.aspxを参照してください。

于 2009-04-21T13:19:28.010 に答える