2017-11-11 61 views
0

我正在尝试使用存储过程创建动态列,从一个数据库到另一个数据库的动态列。 由于我有续集的查询和条件,我正在使用它。 但面临的问题:在Sql中使用不同的数据库过程

Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.

下面是行,其中我遇到错误:

Execute('USE ' + @DB1+ ';CREATE TABLE DB2.dbo.'+ @TableName + ' AS (SELECT * [email protected]'[email protected] +')');

在此先感谢!

+0

答案可能是错误消息。你可以显示完整的脚本,特别是如何设置变量 –

+0

我试图在查询编辑器中运行它,然后没有问题,但在使用2数据库的过程中,我有这个问题。如果我使用 - CREATE TABLE DB2.dbo。'+ @TableName +'AS(SELECT * [email protected]。'+ @ TableName ..这也不起作用,我需要一个解决方案 – ankita25

+0

您能否更新你的问题而不是添加注释 –

回答

1

在代码中,你正在使用@ DB1(第二次出现)内的文本(单引号内),但需要到外面,所以它会被解析为变量。

此外,您还需要使用“select * into”,因为“crate table as”仅适用于Azure SQL DataWarehouse,并且在MS SQL中不是正确的语法。

所以正确的代码会看起来像:

Execute('USE ' + @DB1+ '; SELECT * INTO DB2.dbo.'+ @TableName + ' FROM ' + @DB1 + '.dbo.' + @TableName +')'); 
+0

是的,这对我很有用。我使用的create语句在sql过程中不起作用。我根据你的帮助改变了它,并且它对我有效。如果这解决了你的问题,请感谢 – ankita25

+0

@ ankita25,请将我的答案标记为正确在我的答复左侧打勾) – shimon893

+0

好的我做了@ shimon893 ..他们是否在SQL过程中我们可以使用两台服务器来完成它(而不是使用同一台服务器的两个数据库)。 – ankita25

0
Execute('USE ' + @DB1+ '; SELECT * INTO DB2.dbo.'+ @TableName + ' FROM ' + @DB1 + '.dbo.' + @TableName +')'); 
+2

我认为这将是有益的,如果你添加一个解释,为什么问题中的原始代码不起作用 –

+0

因为我使用的'create table'语句在ms-sql过程中不起作用。 – ankita25

相关问题