试试
select * from server.database.dbo.table SET ANSI_NULLS on
select * from server.database.dbo.table SET ANSI_NULLS on
解决方案 »
- 請教一個簡單的SQL递归查詢問題~~謝謝了
- MS SqlServer2005触发器会造成数据插入堵塞吗
- 急问一条查询语句,100分,在线等
- 奇怪,一台服务器把SQLSERVER2K
- Guid 还是 BigInt 苦恼
- 表值函数中不能用If来根据参数返回不同的结果集么?
- 今天面试遇到一个颇古怪的提问.
- D版sql server2000的cd key是多少, 大家帮帮忙
- 各位高人,小弟在这有礼了。请问什么叫存储过程?
- 我把一个数据库的表和视图倒到另一个新建的数据库!但是原来数据库中的视图全部到新建数据库的表中了!
- 请教SQL SERVER的REFERENCE权限的用法(SORRY,目前还没有分给)
- sql2005导出数据到excel错误
考虑下是否和ANSI SQL标准有关呢
ANSI_NULLS 和 ANSI_WARNINGS 选项打开
到企业管理器中修改存储过程 检查语法时提示
Logiin failed for user '(null)'. Reason :Not associated with a trusted sql server connection我在程序中执行 exec 储存过程名 提示错误 但是拿到查询分析器中执行
exec 存储过程名 就会有结果
我写 select a.*,b.* from table1 a SET ANSI_NULLS on SET ANSI_WARNINGS on,
table2 b SET ANSI_NULLS on SET ANSI_WARNINGS on
执行的时候报错啊
我写 select a.*,b.* from table1 a SET ANSI_NULLS on SET ANSI_WARNINGS on,
table2 b SET ANSI_NULLS on SET ANSI_WARNINGS on
where a.id=b.id
执行的时候报错啊
放最后面
select a.*,b.* from table1 a , table2 b where a.id=b.id SET ANSI_NULLS on SET ANSI_WARNINGS on
Logiin failed for user '(null)'. Reason :Not associated with a trusted sql server connection
set ansi_nulls on set ansi_warnings on 但是一执行就提示 :
General SQL error:
异类查询要为连接设置 ANSI_NULLS 和ANSI_WARNINGS 选项.这将确保一致的查询语义,请启用这些选项,然后重新发出查询.
可能是你在查询分析器里创建了连接所以结果正确,而在存储过程中没有创建连接。建议你建立一个静态的LINKSERVER,从2000的企业管理器里就可以建立,然后光引用这个静态的连接的名字就成了。比如吧,你建立一个CNN_TO_SQL7这么一个连接,并且写好了用户名密码,测试连接通了,然后你直接在存储过程的查询中引用这个名字就好了。
还是怎么来建立这个静态的LINKSERVER 啊 在查询中引用这个名字 怎么引用啊?
举个例子好吗 谢谢 !
我现在两个服务器都改成SQLSERVER 2000 了 可是问题依旧.还是怎么来建立这个静态的LINKSERVER 啊 在查询中引用这个名字 怎么引用啊?
举个例子好吗 非常感谢 !
在server1的查询分析器中 执行
EXEC sp_addlinkedserver @server='server2', @srvproduct='bt_zb',
@provider='SQLOLEDB', @datasrc='server2'
后
在企业管理器中创建存储过程
create proc xxx
as
begin
insert into server1.数据库名.dbo.表名
(jj,bb)
select jj,bb from 表名1 a,表名2 b where a.id=b.id SET ANSI_NULLS ON SET ANSI_WARNINGS ON
end
创建成功!
在查询分析器中执行 exec xxx 正常,结果正确.
但是我用DELPHI 写的程序 来读这个存储过程时 就提示
General SQL error:
异类查询要为连接设置 ANSI_NULLS 和ANSI_WARNINGS 选项.这将确保一致的查询语义,请启用这些选项,然后重新发出查询这是为什么啊???
as
begin
insert into server1.数据库名.dbo.表名
(jj,bb)
select jj,bb from
OPENDATASOURCE('SQLOLEDB', 'Data Source=A;User ID=sa;Password=').数据库名字.表名1 a,
OPENDATASOURCE('SQLOLEDB', 'Data Source=A;User ID=sa;Password=').数据库名字.表名2 b
where a.id=b.id
end
楼主可以这样试一下
考虑 是insert 语句 所以就要考虑加上事物 也就是分布式事物处理 .server1和server 2都打开了 ms dtc 服务
(我的 操作系统是 winxp pro sp2 SQL2000 PRO ) 我的存储过程如下
CREATE proc xxx
as
begin distributed tran insert into server2.数据库.dbo.库表名
(jj,bb)
SELECT a.jj,b.bb
FROM 表1 a,表2 b where a.id=b.id select '倒数据成功!!' as '提示' if @@error = 0
commit tran
else
rollback tran
在server1 的查询分析器中执行 exec xxx 提示:服务器: 消息 7391,级别 16,状态 1,过程 UP_FD_SCSJ,行 29
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
SERVER2 操作系统是 win2003 server SQLSERVER 企业版 所在的组是 admi我在server1上
第一:
控制面板->管理工具->组件服务-> 组件服务->计算机->我的电脑 右键我的电脑
->属性->MSDTC->安全性配置 选择 远程DTC访问、允许远程客户端、允许远程管理、允许入站、
允许出站、不要求进行验证
第二:
在SQLSERVER 中将 自动运行ms dtc(d) 选上 否则每次开机或重起都要去启动MSDTC 在server2上
第一:打开“管理工具”的“组件服务”。
a. 浏览至"启动管理工具"。 b. 选择"组件服务"。 c. 展开"组件服务"树,然后展开"我的电脑"。 d. 右键单击"我的电脑",然后选择"属性"。 在 MSDTC 选项卡中,确保选中了下列选项:
网络 DTC 访问 网络管理 网络事务XA 事务
另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。4、重启MS DTC服务。
第二: 在SQLSERVER 中将 自动运行ms dtc(d) 选上 否则每次开机或重起都要去启动MSDTC
这样我的分布式事务就可以正常执行了,结果OK! 如果哪里交代的不清楚 请见谅啊 ,一晚上没睡了 头有点晕