对于SQL Server Management Studio中的存储过程,我是新手。我有一个应用程序,我被告知使用存储过程进行以下更改:
步骤1.用户键入项目编号。 第2步。客户名称,地址等显示在同一表单的其他字段中。
共有3个表:批量订单,小订单和客户信息。
批量订单和小订单在Database_1中,客户信息在Database_2中。
小订单的主键是订单号。小订单中的列包含每个订单的客户编号。该客户编号是客户表中的主键。 批量订单表类似。
我想要包含一个条件语句:如果在小订单表中找到订单号,则显示来自客户表的数据,该数据与该订单号相关联。我尝试了多种方法,但不断得到“多部分标识符....无法绑定”错误。
即:
SELECT DB1.db.Customer_Table.Customer_Column AS CustomerNumber;
IF(CustomerNumber NOT LIKE '%[a-z]%')
BEGIN
SELECT * FROM db.small_orders_table;
END
ELSE
BEGIN
SELECT * FROM db.buld_orders_table;
END
请帮忙。
答案 0 :(得分:3)
听起来就像在同一台服务器上的2个数据库......在这种情况下,你需要在引用另一个表时指定完全限定的表名(database.schema.table)找到存储过程的数据库。
Database_1.db.small_orders_tables
答案 1 :(得分:0)
首先,您不能将别名用作变量。如果要为变量赋值以便对其进行测试,则必须执行类似SELECT @var = DB1.db.Customer_Table.Customer_Column FROM <YourTableFullName> WHERE <condition>
的SELECT语句。然后你可以使用@var(必须在之前声明)进行测试。
关于您遇到的错误,您以错误的方式使用完全限定名称。如果您位于同一服务器(不同的数据库)上,则需要在顶部指定数据库名称,然后指定对象的架构。假设在Database1上有以下数据库对象:
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
以及Database2上的以下内容:
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
有帮助吗?