Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 3个表,2个数据库,1个存储过程_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 3个表,2个数据库,1个存储过程

Sql 3个表,2个数据库,1个存储过程,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,对于SQLServerManagementStudio中的存储过程,我是个新手。我有一个应用程序,被告知使用存储过程对其进行以下更改: 第一步。用户输入项目编号。 第二步。客户名称、地址等显示在同一表单的其他字段中 共有3个表:批量订单、小订单和客户信息 批量订单和小订单在数据库_1中,客户信息在数据库_2中 小订单的主键是订单号。小订单中的一列包含每个订单的客户编号。该客户编号是customer表中的主键。 批量订单表与此类似 我想包括一个条件语句,它说:如果在small orders表中找到

对于SQLServerManagementStudio中的存储过程,我是个新手。我有一个应用程序,被告知使用存储过程对其进行以下更改:

第一步。用户输入项目编号。 第二步。客户名称、地址等显示在同一表单的其他字段中

共有3个表:批量订单、小订单和客户信息

批量订单和小订单在数据库_1中,客户信息在数据库_2中

小订单的主键是订单号。小订单中的一列包含每个订单的客户编号。该客户编号是customer表中的主键。 批量订单表与此类似

我想包括一个条件语句,它说:如果在small orders表中找到订单号,则显示customer表中与该订单号相关的数据。我尝试了多种方法,但不断出现“多部分标识符…无法绑定”错误

即:


请提供帮助。

听起来好像是同一服务器上的两个数据库……在这种情况下,在引用存储过程所在的另一个数据库上的表时,需要指定完全限定的表名(database.schema.table)

Database_1.db.small_orders_tables

听起来好像是同一台服务器上的两个数据库……在这种情况下,在引用存储过程所在的另一个数据库上的表时,需要指定完全限定的表名(database.schema.table)

Database_1.db.small_orders_tables

听起来好像是同一台服务器上的两个数据库……在这种情况下,在引用存储过程所在的另一个数据库上的表时,需要指定完全限定的表名(database.schema.table)

Database_1.db.small_orders_tables

听起来好像是同一台服务器上的两个数据库……在这种情况下,在引用存储过程所在的另一个数据库上的表时,需要指定完全限定的表名(database.schema.table)

Database_1.db.small_orders_tables

首先,不能将别名用作变量。如果要为变量赋值以对其进行测试,必须执行SELECT语句,如WHERE中的SELECT@var=DB1.db.Customer\u Table.Customer\u Column。然后您可以使用@var(必须在之前声明)进行测试

关于您遇到的错误,您以错误的方式使用完全限定名。如果您在同一台服务器(不同的数据库)上,则只需在顶部指定数据库名称,然后指定对象的架构。假设数据库1上有以下数据库对象:

USE Database1;
GO

CREATE TABLE dbo.Table1
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO

INSERT INTO dbo.Table1 (val) VALUES ('test1');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test2');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test3');
GO
以及数据库2中的以下内容:

USE Database2;
GO

CREATE TABLE dbo.Table2
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO
现在,假设您希望从第一个表中读取id=2的值,然后应用
IF
。让我们声明一个变量并测试它:

USE Database1;
GO

DECLARE @var varchar(30);

-- since you're on Database1, you don't need to specify full name
SELECT @var = val FROM dbo.Table1 WHERE id = 2;

IF @var = 'test2'
BEGIN
    SELECT id, val FROM dbo.Table1;
END
ELSE
BEGIN
    -- in this case the database name is needed
    SELECT id, val FROM Database2.dbo.Table2;
END
GO

它有用吗?

首先,不能将别名用作变量。如果要为变量赋值以对其进行测试,必须执行SELECT语句,如WHERE中的SELECT@var=DB1.db.Customer\u Table.Customer\u Column。然后您可以使用@var(必须在之前声明)进行测试

关于您遇到的错误,您以错误的方式使用完全限定名。如果您在同一台服务器(不同的数据库)上,则只需在顶部指定数据库名称,然后指定对象的架构。假设数据库1上有以下数据库对象:

USE Database1;
GO

CREATE TABLE dbo.Table1
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO

INSERT INTO dbo.Table1 (val) VALUES ('test1');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test2');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test3');
GO
以及数据库2中的以下内容:

USE Database2;
GO

CREATE TABLE dbo.Table2
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO
现在,假设您希望从第一个表中读取id=2的值,然后应用
IF
。让我们声明一个变量并测试它:

USE Database1;
GO

DECLARE @var varchar(30);

-- since you're on Database1, you don't need to specify full name
SELECT @var = val FROM dbo.Table1 WHERE id = 2;

IF @var = 'test2'
BEGIN
    SELECT id, val FROM dbo.Table1;
END
ELSE
BEGIN
    -- in this case the database name is needed
    SELECT id, val FROM Database2.dbo.Table2;
END
GO

它有用吗?

首先,不能将别名用作变量。如果要为变量赋值以对其进行测试,必须执行SELECT语句,如WHERE中的SELECT@var=DB1.db.Customer\u Table.Customer\u Column。然后您可以使用@var(必须在之前声明)进行测试

关于您遇到的错误,您以错误的方式使用完全限定名。如果您在同一台服务器(不同的数据库)上,则只需在顶部指定数据库名称,然后指定对象的架构。假设数据库1上有以下数据库对象:

USE Database1;
GO

CREATE TABLE dbo.Table1
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO

INSERT INTO dbo.Table1 (val) VALUES ('test1');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test2');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test3');
GO
以及数据库2中的以下内容:

USE Database2;
GO

CREATE TABLE dbo.Table2
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO
现在,假设您希望从第一个表中读取id=2的值,然后应用
IF
。让我们声明一个变量并测试它:

USE Database1;
GO

DECLARE @var varchar(30);

-- since you're on Database1, you don't need to specify full name
SELECT @var = val FROM dbo.Table1 WHERE id = 2;

IF @var = 'test2'
BEGIN
    SELECT id, val FROM dbo.Table1;
END
ELSE
BEGIN
    -- in this case the database name is needed
    SELECT id, val FROM Database2.dbo.Table2;
END
GO

它有用吗?

首先,不能将别名用作变量。如果要为变量赋值以对其进行测试,必须执行SELECT语句,如WHERE中的SELECT@var=DB1.db.Customer\u Table.Customer\u Column。然后您可以使用@var(必须在之前声明)进行测试

关于您遇到的错误,您以错误的方式使用完全限定名。如果您在同一台服务器(不同的数据库)上,则只需在顶部指定数据库名称,然后指定对象的架构。假设数据库1上有以下数据库对象:

USE Database1;
GO

CREATE TABLE dbo.Table1
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO

INSERT INTO dbo.Table1 (val) VALUES ('test1');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test2');
GO
INSERT INTO dbo.Table1 (val) VALUES ('test3');
GO
以及数据库2中的以下内容:

USE Database2;
GO

CREATE TABLE dbo.Table2
(
      id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED
    , val varchar(30)
);
GO
现在,假设您希望从第一个表中读取id=2的值,然后应用
IF
。让我们声明一个变量并测试它:

USE Database1;
GO

DECLARE @var varchar(30);

-- since you're on Database1, you don't need to specify full name
SELECT @var = val FROM dbo.Table1 WHERE id = 2;

IF @var = 'test2'
BEGIN
    SELECT id, val FROM dbo.Table1;
END
ELSE
BEGIN
    -- in this case the database name is needed
    SELECT id, val FROM Database2.dbo.Table2;
END
GO

有帮助吗?

服务器1和服务器2之间是否有数据库链接或任何通信?与尝试条件表选择相比,执行左联接和isnull函数更容易。客户编号是否作为参数传递给存储过程?它们位于同一服务器上。我将尝试isnull函数。我的存储过程中没有参数。服务器1和2之间是否有数据库链接或通信?与尝试条件表选择相比,执行左联接和isnull函数更容易