gpt4 book ai didi

sql-server-2008 - SQL Azure 作为链接服务器 -> 获取插入行的标识

转载 作者:行者123 更新时间:2023-12-04 16:11:48 26 4
gpt4 key购买 nike

我已将 Azure 云数据库设置为“SQL Server 2008 R2”服务器的链接服务器,如本文所述:http://blogs.msdn.com/b/sqlcat/archive/2011/03/08/linked-servers-to-sql-azure.aspx我启用了 RPC 和 RPC Out,因为我在某处读到过。

现在的问题是我无法获取刚刚插入的记录的ID。请看一下这个测试表:

CREATE TABLE dbo.TEST
(
ID INT IDENTITY(1, 1) NOT NULL
CONSTRAINT PK_TEST_ID PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

我还创建了这个存储过程:

CREATE PROCEDURE test_create @ID INT OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

INSERT INTO TEST
DEFAULT VALUES

SELECT @ID = SCOPE_IDENTITY()
END

我尝试通过多种方式获取最后插入的值,但没有一个起作用:

DECLARE @ID INT

EXEC AZURE01.TestDB.dbo.test_create @ID OUTPUT
SELECT @ID

INSERT INTO AZURE01.TestDB.dbo.TEST DEFAULT VALUES
SELECT @ID = SCOPE_IDENTITY();
SELECT @ID

INSERT INTO AZURE01.TestDB.dbo.TEST DEFAULT VALUES
SELECT @ID = @@IDENTITY
SELECT @ID

SELECT * FROM OPENQUERY(AZURE01, 'INSERT INTO TestDB.dbo.TEST DEFAULT VALUES; SELECT SCOPE_IDENTITY() AS ID');

DECLARE @ScopeIdentity TABLE (ID int);
INSERT INTO @ScopeIdentity
EXEC AZURE01.master..sp_executesql N'
 INSERT TestDB.dbo.TEST DEFAULT VALUES;
 SELECT SCOPE_IDENTITY()';
SELECT * FROM @ScopeIdentity;

INSERT AZURE01.TestDB.dbo.TEST
OUTPUT inserted.ID
INTO @ScopeIdentity
DEFAULT VALUES
SELECT * FROM @ScopeIdentity

我明白为什么 SCOPE_IDENTITY() 和 @@IDENTITY 不起作用(因为它们是本地函数/变量,没有来自链接服务器的信息),但带有输出参数的存储过程应该起作用,对吗? (在服务器本地它可以工作)

有人吗? :-)

最佳答案

您是否考虑过使用 GUID (uniqueidentifier) 字段代替 int 或与 int 一起使用?

然后,您可以在客户端生成 ID(有多种工具可以生成 GUID)并将其直接传递到插入内容中。

然后,您可以选择根据 GUID 列重新选择行以获取新的 int 值,或者仅使用 GUID 字段作为您的 PK 并完成它。

关于sql-server-2008 - SQL Azure 作为链接服务器 -> 获取插入行的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com