2012-12-25 51 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個字符**長.... –