none
无法使用 SELECT INTO 语句将标识列添加到表 '#tmp',该表的列 'ID' 已继承了标识属性。 RRS feed

  • 问题

  • -- 创建数据源到临时表
        SELECT @sqlStr = 'SELECT Identity(int,1,1) AS RowIndex,'
        SELECT @sqlStr = @sqlStr + rtrim(@sqlSelect) + ' INTO '+ @tmpTable
        SELECT @sqlStr = @sqlStr + rtrim(@sqlFrom)

    表中有一个主键ID,创建临时表@tmpTable会继承IDENTITY 属性,分页查询会报错:无法使用 SELECT INTO 语句将标识列添加到表 '#tmp',该表的列 'ID' 已继承了标识属性。

    msdn的文档是:

    在选择现有标识列并将其插入到新表时,新列将继承 IDENTITY 属性,除非满足以下条件之一:

    • SELECT 语句包含联接、GROUP BY 子句或聚合函数。

    • 多个 SELECT 语句由 UNION 联接。

    • 标识列在选择列表内多次列出。

    • 标识列是表达式的一部分。

    • 标识列来自远程数据源。

    不知道咋改,问问大家


    xiao


    • 已移动 chenrensong 2013年5月18日 6:26 Sql 查询语句问题
    • 已编辑 wh_xiao 2013年5月18日 8:28
    2013年5月18日 2:43

答案

  • 因为LZ你的表里面已经有一个自增列,所以你再在select语句里加自增列是不行的,除非你去掉select语句里的自增列


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 wh_xiao 2013年5月19日 3:20
    2013年5月18日 12:50
  • 一般做分页的时候,我的做法会新建一个临时表,然后用临时表和业务表进行join连接来分页查询

    部分sql,VC_A_SNNO字段是主键

    CREATE TABLE #PageIndex 
    	(
    		IndexId int IDENTITY (1, 1) NOT NULL,
    		VC_A_SNNO varchar(50)
    	)
    	Declare @ConSQL varchar(2000)
    	Declare @StrSQL varchar(2000)
    	set @StrSQL='INSERT INTO #PageIndex (VC_A_SNNO)	SELECT [VC_A_SNNO] FROM [CT_Append] a LEFT OUTER JOIN
                    CT_OuterCard b ON a.VC_A_CardNO = b.VC_OC_CardNO LEFT OUTER JOIN
                    CT_InhouseCard c ON a.VC_A_CardNO = c.VC_IC_CardNO where a.RecordNO<>0'

    SELECT c.VC_A_SNNO, d.[VC_OC_Company], [VC_A_AppendType] , [VC_A_CardNO] , [I_A_CardType] , [I_A_PointToOil] , [VC_TicketType] , [VC_TicketNO] , [DE_A_BAmount] , [DE_A_AppendAmount] , [DE_A_AAmount] , [D_A_AppendDateTime] , [VC_A_Remark] , [VC_A_OperatorNO] FROM #PageIndex PageIndex,[CT_Append] c LEFT OUTER JOIN [dbo].[CT_OuterCard] d ON c.[VC_A_CardNO]=d.[VC_OC_CardNO] WHERE c.VC_A_SNNO = PageIndex.VC_A_SNNO AND PageIndex.IndexID > @PageLowerBound AND PageIndex.IndexID < @PageUpperBound order by D_A_AppendDateTime DESC


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 wh_xiao 2013年5月19日 3:20
    2013年5月18日 12:56
  • You can insert data to identity column with following:

    set identity_insert table_name on

    • 已标记为答案 wh_xiao 2013年5月19日 3:20
    2013年5月18日 21:26

全部回复

  • 由于问的是Sql问题,所以我将你的问题移动到SQLServer区,希望理解。。

    认真的活,认真的爱!

    2013年5月18日 6:27
  • 因为LZ你的表里面已经有一个自增列,所以你再在select语句里加自增列是不行的,除非你去掉select语句里的自增列


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 wh_xiao 2013年5月19日 3:20
    2013年5月18日 12:50
  • 一般做分页的时候,我的做法会新建一个临时表,然后用临时表和业务表进行join连接来分页查询

    部分sql,VC_A_SNNO字段是主键

    CREATE TABLE #PageIndex 
    	(
    		IndexId int IDENTITY (1, 1) NOT NULL,
    		VC_A_SNNO varchar(50)
    	)
    	Declare @ConSQL varchar(2000)
    	Declare @StrSQL varchar(2000)
    	set @StrSQL='INSERT INTO #PageIndex (VC_A_SNNO)	SELECT [VC_A_SNNO] FROM [CT_Append] a LEFT OUTER JOIN
                    CT_OuterCard b ON a.VC_A_CardNO = b.VC_OC_CardNO LEFT OUTER JOIN
                    CT_InhouseCard c ON a.VC_A_CardNO = c.VC_IC_CardNO where a.RecordNO<>0'

    SELECT c.VC_A_SNNO, d.[VC_OC_Company], [VC_A_AppendType] , [VC_A_CardNO] , [I_A_CardType] , [I_A_PointToOil] , [VC_TicketType] , [VC_TicketNO] , [DE_A_BAmount] , [DE_A_AppendAmount] , [DE_A_AAmount] , [D_A_AppendDateTime] , [VC_A_Remark] , [VC_A_OperatorNO] FROM #PageIndex PageIndex,[CT_Append] c LEFT OUTER JOIN [dbo].[CT_OuterCard] d ON c.[VC_A_CardNO]=d.[VC_OC_CardNO] WHERE c.VC_A_SNNO = PageIndex.VC_A_SNNO AND PageIndex.IndexID > @PageLowerBound AND PageIndex.IndexID < @PageUpperBound order by D_A_AppendDateTime DESC


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 wh_xiao 2013年5月19日 3:20
    2013年5月18日 12:56
  • ID号是自增列,这个是主键,去掉自增会出问题
    2013年5月18日 14:55
  • 不是说要去掉你的表里的自增列,而是去掉sql语句里的'SELECT Identity(int,1,1) AS RowIndex,

    把'Identity(int,1,1) AS RowIndex,'这个去掉查询的时候


    给我写信: QQ我:点击这里给我发消息

    2013年5月18日 15:02
  • 这种思路很好,但是我的想法是做一个类似模板的东西,对所有的查询用一个存储过程。网站分页的查询语句太多了,而且对应不同的表,想用同一个存储过程完成大部分的工作,减少工作量
    2013年5月18日 15:03
  • You can insert data to identity column with following:

    set identity_insert table_name on

    • 已标记为答案 wh_xiao 2013年5月19日 3:20
    2013年5月18日 21:26
  • 这种思路很好,但是我的想法是做一个类似模板的东西,对所有的查询用一个存储过程。网站分页的查询语句太多了,而且对应不同的表,想用同一个存储过程完成大部分的工作,减少工作量

    可以啊,我们的系统也是,每张表的分页,增删改查都是用模板来做的,我们项目经理做的一个工具,能够

    自动生成每张表的增,删,改,查,分页等存储过程,不过生成了之后还需要自己修改一下的

    我给出的存储过程代码都是用项目经理的工具生成的sql代码

    思路是:创建临时表,临时表一般只有两个字段,VC_A_SNNO 字段是表的主键,这样两表连接,然后分页

    利用临时表来分,分页的前提的条件是表必须有主键或唯一约束的列

    IndexId int IDENTITY (1, 1) NOT NULL,
    VC_A_SNNO varchar(50)

     

     


    给我写信: QQ我:点击这里给我发消息

    2013年5月20日 9:47