SQL Server 2008R2 - 从多个表插入

标签 sql select join sql-server-2008-r2 sql-insert

我的存储过程有一个问题(实际上是两个问题),我可能会在这里犯一个菜鸟错误,但我尝试修复它但惨败。输入堆栈溢出专家来拯救我:D

我希望能够使用存储过程(其工作原理如下)将新约会插入我的约会表中。问题是我试图通过输入设计师和客户的姓名来获取他们的 ID(显然这些 ID 位于单独的表中,您可以看到我试图在代码片段中获取 ID 的位置... )无论如何,我没有遇到任何错误,但它实际上没有做任何事情,因为在测试存储过程时没有任何内容插入到约会表中(它执行得很好)。我不确定这是为什么,也不知道从哪里开始寻找。

还有一个可能相关的问题,那就是 c.fullName 和 s.fullName 不断地用红线下划线表示无法找到它们。这两列都存在于客户表和造型师表中;它们都是计算列(名字+姓氏)并且在其他查询中工作得很好,所以我不明白为什么它们在这里不起作用。

@AppDate date = null,
@AppTime time(5) = null,
@Details varchar(255) = null,
@ClientName varchar(50) = null,
@StylistName varchar(50) = null,
@ClientID int = null,
@StylistID int = null

INSERT into appointment(appDate, appTime, details, clientID, stylistID)
SELECT
    @AppDate AS appDate, 
    @AppTime AS appTime, 
    @Details AS details,
    @ClientID, 
    @StylistID
FROM appointment a
JOIN client c 
ON c.clientID = a.clientID
JOIN stylist s
ON s.stylistID = a.stylistID
WHERE c.fullName = @ClientName
AND s.fullName = @StylistName

任何想法或提示将非常感激:)

编辑: 我只是注意到,当我注销并再次登录时,它消除了 fullName 列的问题 - 我之前确实尝试过此操作,但它不起作用,但显然现在它似乎不是问题......存储但程序仍然没有插入任何内容:(

最佳答案

错误#1:

您甚至没有尝试从表中插入 ClientID 和 StylistID,而是插入回输入参数 @ClientID 和 @StylistID。您的整个选择没有从表中选择任何内容。

但是,这不会导致行无法插入,因为如果它们是由 select 返回的,则它们将被插入 NULL 值。

错误#2:

您的查询实际上是搜索与相同客户和造型师的现有约会。我猜这些不存在,这就是为什么没有插入行。如果它们确实存在,您将使用此插入复制它们。

修复:

在 INSERT 语句之前搜索 ClientID 和 StylistID。从输入参数中删除@ClientID和@StylistID并在过程主体中声明它们。

DECLARE @ClientID int;
DECLARE @StylistID int;

SELECT @ClientID = ClientID FROM client WHERE fullName = @ClientName
SELECT @StylistID = StylistID FROM stylist WHERE fullName = @StylistName


INSERT into appointment(appDate, appTime, details, clientID, stylistID)
SELECT
    @AppDate AS appDate, 
    @AppTime AS appTime, 
    @Details AS details,
    @ClientID, 
    @StylistID

PS:当某些内容带有红色下划线且不应该出现时,可按 CTRL-SHIFT-R 刷新智能感知

关于SQL Server 2008R2 - 从多个表插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058004/

相关文章:

mysql - 根据另一个表的 id 对一个基于结果的组中两个不同表的两列求和

mysql - 如何将数据从数据库复制到另一个数据库?

java - 无法解析的日期异常 Windows Azure 移动服务

sql - 根据另一列的值对多列创建约束

php - PDO 查询中的 SQL 语法错误

mysql - 每位客户当天的倒数第五笔交易

sql - MySQL: "The SELECT would examine more than MAX_JOIN_SIZE rows"

sql - postgreSQL 错误中的 WHERE 子句中不允许聚合

c++ - vc++ (sqlite) 如何区分语句是 SELECT - 还是 NOT?

mysql - 有一个列 'number_of_likes' 或者有一个单独的列...?