问题描述
使用Sybase ASE 16
我有一个使用tsql函数host_name()提供默认列值的表:
CREATE TABLE exampleTable
(
id INT,hostname VARCHAR(32) DEFAULT Host_name()
);
该表可以正常工作并填充。但是,我想对该表中的所有数据进行BCP(批量复制),以便将其暂存以进行监视/报告等。在具有类似这种模式的许多表上都会发生这种情况。
我的问题如下:bcping到不同主机上的另一个数据库后,host_name()的默认值发生变化,以反映它所驻留的 CURRENT 主机上。这意味着,bcp好像正在传递函数host_name()本身,而不是其最初提供的值。我希望bcp改为从源传递默认的host_name()。
示例:db1具有主机123。我想将值123 bcp传递给具有主机456的另一个db。取而代之,bcp传递host_name()本身,这会将已传输表中所有'123'的值更改为456。
有想法吗?
我对BCP相对缺乏经验,所以我不确定是否有保留默认值的命令选项。我也在考虑使用CAST(host_name(),AS varchar(32))
替换上表中的当前默认值^
否则,我以为我要更改填充表的插入语句。当前非常简单:
exec sp_monitorconfig 'number of open databases',exampleTable
这会将系统存储的proc的结果集插入到我的表中。我不确定如何更改它以插入host_name()或它产生的值。
让我知道这是否有意义。
谢谢
解决方法
我用host_name()
替换了我的表模式中的asehostname()
,我的问题解决了。 host_name()
每次都返回执行bcp作业的计算机的名称,而不是返回数据来自的ASE主机。