谁能告诉我,如果有一个相当于SCOPE_IDENTITY()
使用的GUID作为SQL Server中的主键是什么时候?
我不想先创建GUID并保存为一个变量,我们使用顺序的GUID作为我们的主键。
什么任何想法来检索最后插入的GUID主键的最佳方式?
谁能告诉我,如果有一个相当于SCOPE_IDENTITY()
使用的GUID作为SQL Server中的主键是什么时候?
我不想先创建GUID并保存为一个变量,我们使用顺序的GUID作为我们的主键。
什么任何想法来检索最后插入的GUID主键的最佳方式?
您可以通过使用OUTPUT得到GUID回来。 当你插入多个记录也这工作。
CREATE TABLE dbo.GuidPk (
ColGuid uniqueidentifier NOT NULL DEFAULT NewSequentialID(),
Col2 int NOT NULL
)
GO
DECLARE @op TABLE (
ColGuid uniqueidentifier
)
INSERT INTO dbo.GuidPk (
Col2
)
OUTPUT inserted.ColGuid
INTO @op
VALUES (1)
SELECT * FROM @op
SELECT * FROM dbo.GuidPk
参考: 探索SQL 2005的OUTPUT子句
使用的GUID作为主键的时候,但你可以使用OUTPUT子句来实现类似的结果没有SCOPE_IDENTITY()等同。 你并不需要使用表变量输出。
CREATE TABLE dbo.GuidTest (
GuidColumn uniqueidentifier NOT NULL DEFAULT NewSequentialID(),
IntColumn int NOT NULL
)
GO
INSERT INTO GuidTest(IntColumn)
OUTPUT inserted.GuidColumn
VALUES(1)
如果你想读从.NET客户端的价值上面的例子是非常有用的。 要读取的.Net你只使用ExecuteScalar方法的价值。
...
string sql = "INSERT INTO GuidTest(IntColumn) OUTPUT inserted.GuidColumn VALUES(1)";
SqlCommand cmd = new SqlCommand(sql, conn);
Guid guid = (Guid)cmd.ExecuteScalar();
...
要使用NEWID()
declare @id uniqueidentifier
set @id = NEWID()
INSERT INTO [dbo].[tbl1]
([id])
VALUES
(@id)
select @id
但聚集索引的问题是有没有GUID。 阅读这一个了NEWSEQUENTIALID() 。这些是我的想法,认为使用GUID作为前主密钥 。 :)
CREATE TABLE TestTable(KEY uniqueidentifier, ID VARCHAR(100), Name VARCHAR(100), Value tinyint);
Declare @id uniqueidentifier ;
DECLARE @TmpTable TABLE (KEY uniqueidentifier);
INSERT INTO [dbo].[TestTable]
([ID], [Name], Value])
OUTPUT INSERTED.KEY INTO @TmpTable
VALUES(@ID, @Name, @Value);
SELECT @uniqueidentifier = KEY FROM @TmpTable;
DROP TABLE TestTable;
使用这个线程作为一种资源,我创建了一个触发器中使用以下命令:
DECLARE @nextId uniqueIdentifier;
DECLARE @tempTable TABLE(theKey uniqueIdentifier NOT NULL DEFAULT NewSequentialID(), b int);
INSERT INTO @tempTable (b) Values(@b);
SELECT @nextId = theKey from @tempTable;
可以帮助别人做同样的事情。 好奇,如果有人有什么不好说的性能明智的,如果这不是一个好主意或没有。