2012-12-25 50 views
0

我有客户名称和医生姓名。我想从数据库中获取ID并在表中插入ID。SQL查找并插入

CREATE PROCEDURE AddMedicalCard 
@Client nchar, 
@Doctor nchar 
AS 
BEGIN 
    SELECT Clients.[ClientCode] AS [Code] 
    Into #NewClientCode 
    FROM Clients 
    WHERE Clients.[ClientName][email protected] 

    SELECT Personal.[DoctorCode] AS [Code] 
    Into #NewDoctorCode 
    FROM Personal 
    WHERE Personal.[DoctorName][email protected] 

    INSERT INTO MedicalCard 
     VALUES (#NewClientCode.[Code].First, #NewDoctorCode.[Code].First) 

    DROP TABLE #NewClientCode 
    DROP TABLE #NewDoctorCode 
END 
GO 

错误:

多部分识别符 “#NewDoctorCode.Code.First” 不能被约束。
无法绑定多部分标识符“#NewClientCode.Code.First”。 列名或提供的值的数量与表定义不匹配。

MedicalCard表设计:

RecordingCode(Key), ClientCode, DoctorCode 

和5其它空的列。

+0

首先:如果你使用任何字符串相关类型作为参数 - ** **总是指定一个长度!否则你的字符串将是** 1个字符长**!其次:为什么'nchar'?如果你有一个固定长度的字符串 - 例如一个3个字符的货币代码或类似的东西。否则,我会**总是**使用'nvarchar(x)'作为可变长度的字符串。 –

+0

另外:为什么即使使用临时表?你只是检索一个值 - 只是将它们存储到SQL变量中,并在INSERT语句中使用这些变量...使用**两个**临时表格对于此非常低效并且总体过度杀伤... –

回答

1

错误消息说,这一切。没有这样的东西#NewDoctorCode.Code.First。你的工作可以很容易地完成,如下所示。

注意:由于可能有超过1个客户端名称相同的医生,因此得到客户端代码和医生代码的名称并不正确。

--declare two variables 
declare @clientCode varchar(50), @doctorCode varchar(50) 

--assign clientCode 
SELECT TOP 1 @clientCode = Clients.[ClientCode] 
FROM Clients 
WHERE Clients.[ClientName][email protected] 

--assign doctorCode 
SELECT TOP 1 @doctorCode = Personal.[DoctorCode] 
FROM Personal 
WHERE Personal.[DoctorName][email protected] 

--finally insert them to MedicalCard table 
INSERT INTO MedicalCard (clientCodeColumn,doctorCodeColumn) --Column Names 
VALUES (@clientCode,@doctorCode) 
+0

Works 。谢谢你。 – Stalli

+0

我刚刚编辑添加“TOP 1”。也请阅读我的'笔记'。 – Kaf

0

做这样的事情

DECLARE @i INT; 
SELECT @i = id FROM youtable; 
BEGIN 
    Insert into tablename(column1) values(@i) 
END 
0

试试这个,你应该使用变量而不是表格。如果您使用的表,那么你应该使用insert into table select col

DECLARE @NewClientCode int 
DECLARE @NewDoctorCode int 

SELECT @NewClientCode = Clients.[ClientCode] 
FROM Clients 
WHERE Clients.[ClientName][email protected] 

SELECT @NewDoctorCode = Personal.[DoctorCode] 
FROM Personal 
WHERE Personal.[DoctorName][email protected] 

INSERT INTO MedicalCard 
    VALUES (@NewClientCode, @NewDoctorCode) 
0

尝试使用此SP:

CREATE PROCEDURE AddMedicalCard 
@Client nchar, 
@Doctor nchar 
AS 
BEGIN 




    INSERT INTO MedicalCard 
     VALUES (
       SELECT TOP 1 Clients.[ClientCode] 
       FROM Clients 
       WHERE Clients.[ClientName][email protected], 

       SELECT TOP 1 Personal.[DoctorCode] 
       FROM Personal 
       WHERE Personal.[DoctorName][email protected] 
      ) 


END 
GO 
+0

**始终**在字符串参数上定义**长度**!否则,他们最终会成为** 1个字符**长.... –