none
MS SQL Server 2008中, 合并复制与Bulk copy冲突吗 RRS feed

  • 问题

  • 数据库中有一个表, 加入到了合并复制项目中了, 当对该表执行 bcp_init()时失败, 得到的错误是:

    newsequentialid() 内置函数只能在 CREATE TABLE 语句或 ALTER TABLE 语句中 'uniqueidentifier' 类型的列的 DEFAULT 表达式中使用。不能与其他运算符一起用来构成复杂的标量表达式.

    请教如果一个表的合并复制与Bulk copy冲突吗?

     

    2010年9月26日 7:36

全部回复

  • Can you post table schema and tell how to bulk copy data?
    2010年9月26日 14:59
  • 感谢rmiao的关注, 我又作了些工作, 数据库及程序如下:

    创建数据库test及表t1, t1用于合并复制:
    create database test
    Go

    USE [test]
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[t1](
     [aa] [nchar](10) NULL,
     [bb] [nchar](10) NULL,
     [rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL
    ) ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[t1] ADD  CONSTRAINT [MSmerge_df_rowguid_DB334A2B36C64208AE1C2F245DEDFE07]  DEFAULT (newsequentialid()) FOR [rowguid]
    GO

    在VC6中通过DB-LIBRARY访问数据库, 完成Bulk Copy操作:

    #include "stdafx.h"
    #define DBNTWIN32
    #include "windows.h"
    #include <sqlfront.h>
    #include <sqldb.h>
    #include <iostream.h>

    #pragma comment(lib,"NTWDBLIB.LIB")

    void main()
    {
     DBPROCESS *dbproc;
     LOGINREC *login;
     
     login=dblogin();

     DBSETLUSER(login,"sa");
     DBSETLPWD(login,"");

     int retcode;
     
     if ( (retcode=BCP_SETL(login, true)) == FAIL)
         cout<< "ERROR: BCP_SETL failed\n";

     dbproc=dbopen(login,"127.0.0.1");

     dbuse(dbproc,"test");

            if ((retcode=bcp_init(dbproc, "t1", (LPCSTR)NULL,
      (LPCSTR)NULL, (DBINT)DB_IN)) == FAIL)
         cout<< "ERROR: bcp_init failed\n";
            cout<<endl;
    }

    问题:

    执行 bcp_init()时失败, 查看数据库中的错误信息为:

    newsequentialid() 内置函数只能在 CREATE TABLE 语句或 ALTER TABLE 语句中 'uniqueidentifier' 类型的列的 DEFAULT 表达式中使用。不能与其他运算符一起用来构成复杂的标量表达式.

     

     

    2010年9月28日 9:38
  • How many fields the data file has?
    2010年9月28日 13:44
  • No user file is used, to call bcp_bind to specify the format and location in memory for each column's data value.

    2010年9月29日 1:09
  • You bcp out from table or into table?
    2010年9月29日 2:21
  • bcp into table.
    2010年9月29日 2:26
  • Did you use rowguid in any condition for bcp?
    2010年9月29日 3:12
  • 其实rowguid是由于设置了合并复制产生的, 在我的程序中不关心这个 rowguid . 但当我在db-library C 程序中执行bcp时,就会失败. 具体是执行bcp_init()初始化时就失败了.

    2010年9月29日 3:23