现在是会往数据库插入一个值,这个值是随机生成的并且不重复的。把这个值用来做主键插入了之后怎么,返回这个值。因为这个值将作为另外一个表的外键和这个表做连接的。我只知道  insert into test (aa) value ('1');select @@identity;
是可以返回自动编号的

解决方案 »

  1.   

    其实有三种方法IDENT_CURRENT
    返回为任何会话和任何作用域中的指定表最后生成的标识值。 语法
    IDENT_CURRENT('table_name')参数
    table_name是将要返回其标识值的表的名称。table_name 的数据类型为 varchar,没有默认值。返回类型
    sql_variant注释
    IDENT_CURRENT 类似于 Microsoft SQL Server™ 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。 IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。
    IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。
    @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
    SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。 
      

  2.   

    sql 2005中新增了output子句可以
      

  3.   

    用IDENTITYselect @@identity; 
      

  4.   

    IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。
    @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
    SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值
      

  5.   

    A. 将 OUTPUT INTO 用于简单 INSERT 语句
    以下示例将行插入 ScrapReason 表,并使用 OUTPUT 子句将语句的结果返回到 @MyTableVar table 变量。由于 ScrapReasonID 列使用 IDENTITY 属性定义,因此未在 INSERT 语句中为该列指定一个值。但请注意,将在列 INSERTED.ScrapReasonID 内的 OUTPUT 子句中返回由数据库引擎 为该列生成的值。 复制代码 
    USE AdventureWorks;
    GO
    DECLARE @MyTableVar table( ScrapReasonID smallint,
                               Name varchar(50),
                               ModifiedDate datetime);
    INSERT Production.ScrapReason
        OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
            INTO @MyTableVar
    VALUES (N'Operator error', GETDATE());--Display the result set of the table variable.
    SELECT ScrapReasonID, Name, ModifiedDate FROM @MyTableVar;
    --Display the result set of the table.
    SELECT ScrapReasonID, Name, ModifiedDate 
    FROM Production.ScrapReason;
    GO B. 将 OUTPUT 用于 INSERT…SELECT 语句
    以下示例创建 EmployeeSales 表,然后通过使用 SELECT 语句检索源表中的数据将几行插入该表。同时,也计算了列 ProjectedSales 的值并将其插入该表中。OUTPUT 子句将 INSERT 语句的结果返回到执行调用的应用程序。最后的 SELECT 语句验证新 EmployeeSales 表的内容是否与 OUTPUT 子句的结果匹配。 复制代码 
    USE AdventureWorks ;
    GO
    IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL
        DROP TABLE dbo.EmployeeSales;
    GO
    CREATE TABLE dbo.EmployeeSales
    ( EmployeeID   nvarchar(11) NOT NULL,
      LastName     nvarchar(20) NOT NULL,
      FirstName    nvarchar(20) NOT NULL,
      CurrentSales money NOT NULL,
      ProjectedSales money NOT NULL
    );
    GOINSERT INTO dbo.EmployeeSales 
        OUTPUT INSERTED.EmployeeID, 
               INSERTED.LastName, 
               INSERTED.FirstName, 
               INSERTED.CurrentSales,
               INSERTED.ProjectedSales
        SELECT e.EmployeeID, c.LastName, c.FirstName, sp.SalesYTD, sp.SalesYTD * 1.10
        FROM HumanResources.Employee AS e
            INNER JOIN Sales.SalesPerson AS sp
            ON e.EmployeeID = sp.SalesPersonID 
            INNER JOIN Person.Contact AS c
            ON e.ContactID = c.ContactID
        WHERE e.EmployeeID LIKE '2%'
        ORDER BY c.LastName, c.FirstName;
    GO
    SELECT EmployeeID, LastName, FirstName, CurrentSales, ProjectedSales
    FROM dbo.EmployeeSales;
    GO 
      

  6.   

    create table tes(aa varchar(20))declare @test table(id int)
    insert into tes (aa)   output inserted.aa into @test select '1'; 
    select * from @test/*
    id
    -----------
    1(1 行受影响)
    */
      

  7.   

    我是用代码写的guid查进去的  这个字段是主键 我用 select @@identity没用
      

  8.   

    我是要立即返回到程序中 
    插入了主表 就要插详细表
    主表返回他的主键guid,然后详细表中要插入主表的guid
      

  9.   

    如果这个表中有自增列,则可以
    select @@identity
    ,所以最好用存贮过程,将@@identity以output参数的形式返回来。
      

  10.   


    create table tes(aa uniqueidentifier)declare @test table(id uniqueidentifier)
    insert into tes (aa)   
    output inserted.aa into @test select newid(); 
    select * from @test
    --select * from tes
      

  11.   

    直接用一变量存储NewID()结果然后返回不行吗?
      

  12.   

    用存储过程,加入一个输出参数。先用newid()得到一个GUID,然后再插入,最后返回就可以了。
      

  13.   

    IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。 
    @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 
    SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值
      

  14.   

    sql 2005中新增了output子句可以