Sql server 2008 r2 在存储过程(SQL Server 2008 R2 SP2)中,是否可以返回不带临时表变量的NewSequentialID()?
在使用SQL Server 2008 R2 SP2的存储过程中,是否可以返回不带临时表变量的NewSequentialID 我可以使用临时表成功获取NewSequentialID: 也许我是老派,但我尽量避免使用临时表,除非绝对必要…尽管这可能是绝对必要的情况 如果我尝试:Sql server 2008 r2 在存储过程(SQL Server 2008 R2 SP2)中,是否可以返回不带临时表变量的NewSequentialID()?,sql-server-2008-r2,temp-tables,newsequentialid,Sql Server 2008 R2,Temp Tables,Newsequentialid,在使用SQL Server 2008 R2 SP2的存储过程中,是否可以返回不带临时表变量的NewSequentialID 我可以使用临时表成功获取NewSequentialID: 也许我是老派,但我尽量避免使用临时表,除非绝对必要…尽管这可能是绝对必要的情况 如果我尝试: DECLARE @NewSequentialID UNIQUEIDENTIFIER; SET @NewSequentialID = NEWID() DECLARE @NewSequentialID UNIQUEIDENTI
DECLARE @NewSequentialID UNIQUEIDENTIFIER;
SET @NewSequentialID = NEWID()
DECLARE @NewSequentialID UNIQUEIDENTIFIER;
SET @NewSequentialID = NEWSEQUENTIALID()
…它按预期工作
如果我尝试:
DECLARE @NewSequentialID UNIQUEIDENTIFIER;
SET @NewSequentialID = NEWID()
DECLARE @NewSequentialID UNIQUEIDENTIFIER;
SET @NewSequentialID = NEWSEQUENTIALID()
…我收到以下错误:
newsequentialid内置函数只能在默认情况下使用
创建表中“uniqueidentifier”类型列的表达式
或ALTER TABLE语句。它不能与其他运算符组合
形成一个复杂的标量表达式
是使用临时表方法的唯一解决方案吗?
有人知道为什么微软在NEWSEQUENTIALID和NEWID之间实现了区别吗?
有人知道微软是否有机会更新NEWSEQUENTIALID,使其像NEWID一样工作吗?
地理位置
更新-
我不知道微软为什么选择以这种方式实现这个方法,因为他们说,NEWSEQUENTIALID是Windows UuidCreateSequential函数的包装器。。。但似乎没有非临时变量表方法。至少到目前为止。谢谢大家的评论/回答。[主持人注:]我不确定在无法回答问题时该如何处理问题。因此,我要赞扬@marc_详细介绍了一个解决方法。现在-newsequentialid只能用作列的默认约束。这也是错误信息非常清楚地说明的
因此,为了获得顺序GUID,您必须有一个表。没有其他方法可以做到这一点。在SQLServer2012中也没有其他方法
我不知道为什么会有这样的差异,也不知道为什么微软会选择这种方式来实现它
更新:
好的,那么您需要获取插入到表中的值-使用如何
比如:
DECLARE @NewIDs TABLE (NewSeqID UNIQUEIDENTIFIER)
INSERT INTO dbo.YourTable(list-of-columns)
OUTPUT INSERTED.NewSeqID INTO @NewIDs(NewSeqID)
VALUES (.........)
这样,INSERT操作的输出——新创建的顺序GUID——被存储到该表变量中,您可以使用它,返回它,切片它——无论您喜欢什么 目前-newsequentialid只能用作列的默认约束。这也是错误信息非常清楚地说明的
因此,为了获得顺序GUID,您必须有一个表。没有其他方法可以做到这一点。在SQLServer2012中也没有其他方法
我不知道为什么会有这样的差异,也不知道为什么微软会选择这种方式来实现它
更新:
好的,那么您需要获取插入到表中的值-使用如何
比如:
DECLARE @NewIDs TABLE (NewSeqID UNIQUEIDENTIFIER)
INSERT INTO dbo.YourTable(list-of-columns)
OUTPUT INSERTED.NewSeqID INTO @NewIDs(NewSeqID)
VALUES (.........)
这样,INSERT操作的输出——新创建的顺序GUID——被存储到该表变量中,您可以使用它,返回它,切片它——无论您喜欢什么 微软的官方说法是: NEWSEQUENTIALID只能与表上的默认约束一起使用 uniqueidentifier类型的列。例如:创建表myTable ColumnA唯一标识符默认NEWSEQUENTIALID 这里描述
NewID生成一个随机数,另一个是下一个序列号。微软的官方说法是: NEWSEQUENTIALID只能与表上的默认约束一起使用 uniqueidentifier类型的列。例如:创建表myTable ColumnA唯一标识符默认NEWSEQUENTIALID 这里描述
NewID生成一个随机数,另一个是下一个序列号。答案是否定的。你能解释一下你想做什么吗?也许有更好的解决方案。我需要将存储过程中新记录创建的guid返回给调用程序。答案是“否”。你能解释一下你想做什么吗?也许有更好的解决方案。我需要将存储过程中新记录创建的guid返回给调用程序。newsequentialid在表定义中用于列的默认值。我需要将存储过程中新记录创建的guid返回给调用程序。newsequentialid在表定义中用于列的默认值。我需要将存储过程中新记录创建的guid返回给调用程序。