询问者
MS SQL Server 2008中, 合并复制与Bulk copy冲突吗

问题
全部回复
-
感谢rmiao的关注, 我又作了些工作, 数据库及程序如下:
创建数据库test及表t1, t1用于合并复制:
create database test
GoUSE [test]
GOSET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE 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 表达式中使用。不能与其他运算符一起用来构成复杂的标量表达式.