在另一个实例上创建表

时间:2018-11-08 14:09:28

标签: sql instance

我已经使用Stackoverflow已有一段时间了,但这是我第一次发布问题...请保持温柔。

我为HR软件提供商工作,并且正在研究将数据从一个数据库复制到另一个数据库的过程。

我有以下脚本,这些脚本将基于客户端可以在系统中创建的自定义表生成插入语句:

select 'IF NOT EXISTS (SELECT * FROM [__TARGETINST__].[__TARGETDB__].[dbo].[SysObjects] o
 INNER JOIN [__TARGETINST__].[__TARGETDB__].[dbo].[SysColumns] 
c ON o.ID = c.ID WHERE o.name =' 
+ '''' + name + '''' + ') ' +'Begin' + ' ' + 'CREATE TABLE' + ' ' + name + ' 
(Employeeid UniqueIdentifier NOT NULL, ' + 'Sequence bigint NOT NULL,RUID 
UniqueIdentifier NOT NULL,' + 
'SYS_EffectiveDate datetime NOT NULL, SYS_ModifiedBy Nvarchar(50) NULL, 
SYS_ModifiedDate datetime NOT NULL,' + 'SYS_RequestID UniqueIdentifier NULL, 
Primary Key (Employeeid, sequence),' +
' Foreign key (employeeid) references employee(employeeid))' + ' end'
from [__SOURCEINST__].[__SOURCEDB__].sys.tables 
where name like '%_client'
and name in (select dbtable from [__SOURCEINST__].[__SOURCEDB__].[dbo] 
IntranetPages)
and name not in ('Employeetable1_CLIENT','Employeetable2_CLIENT')
and type_desc = 'USER_TABLE'

这最终将创建一些旨在在 TARGETDB 中创建空表的插入语句,例如:

IF NOT EXISTS 
(
SELECT * FROM [__TARGETINST__].[__TARGETDB__].[dbo].[SysObjects] o 
    INNER JOIN [__TARGETINST__].[__TARGETDB__].[dbo].[SysColumns] c 
    ON o.ID = c.ID WHERE o.name ='newtable_CLIENT'
) 
Begin 
CREATE TABLE newtable_CLIENT
(
Employeeid UniqueIdentifier NOT NULL, 
Sequence bigint NOT NULL,
RUID UniqueIdentifier NOT NULL,
SYS_EffectiveDate datetime NOT NULL, 
SYS_ModifiedBy Nvarchar(50) NULL, 
SYS_ModifiedDate datetime NOT NULL,
SYS_RequestID UniqueIdentifier NULL, 
Primary Key (Employeeid, sequence), 
Foreign key (employeeid) references employee(employeeid)
) 
end

我认为我的问题是涉及3个实例。 [ TARGETINST ]和[ SOURCEINST ]未链接(怕无法链接),但我确实有另一个实例与它们两个都链接了。我正在尝试在“ TRANSFERINST”上运行脚本,但遇到以下错误:

Msg 1767, Level 16, State 0, Line 52
Foreign key '__KEY__' references invalid table 'employee'.

我认为这是Create的问题,因为SQL不知道在哪里创建表。所以我更新为:

IF NOT EXISTS 
(
SELECT * FROM [__TARGETINST__].[__TARGETDB__].[dbo].[SysObjects] o 
    INNER JOIN [__TARGETINST__].[__TARGETDB__].[dbo].[SysColumns] c 
    ON o.ID = c.ID WHERE o.name ='newtable_CLIENT'
) 
Begin 
CREATE TABLE [__TARGETINST__].[__TARGETDB__].[dbo].newtable_CLIENT
(
Employeeid UniqueIdentifier NOT NULL, 
Sequence bigint NOT NULL,
RUID UniqueIdentifier NOT NULL,
SYS_EffectiveDate datetime NOT NULL, 
SYS_ModifiedBy Nvarchar(50) NULL, 
SYS_ModifiedDate datetime NOT NULL,
SYS_RequestID UniqueIdentifier NULL, 
Primary Key (Employeeid, sequence), 
Foreign key (employeeid) references employee(employeeid)
) 
end

但随后收到以下消息:

对象名称'[ TARGETINST ]。[ TARGETDB ]。dbo.newtable'包含的前缀数量超过最大数量。最大值为2。

我现在有些困惑,在我进行的任何搜索中似乎都找不到答案。

我什至不确定是否可以在另一个实例上创建空白表。我可以从“ TRANSFERINST”查询和更新不同的数据库。

我已经看到可以“选择*进入”,但是我需要将表留空,以便该过程中的下一个脚本可以创建相关的自定义列。表格和列到位后,我将根据 SOURCEDB 中保存的数据来填充它们。

希望这很有意义,并期待听到您的想法。

干杯。

1 个答案:

答案 0 :(得分:0)

弄清楚了。

只需将创建表包装在执行'AT'中

curl -X POST "http://localhost:5601/api/saved_objects/index-pattern/logstash" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'
 {
"attributes": {
 "title": "logstash-*","timeFieldName": "time"
 }
}'

当您知道如何时,就这么简单!

相关问题