2011-05-05 40 views
0

我新的事務SQL我是股票與此哪裏出了問題

CREATE PROCEDURE Example 
    @MAESTRDESC varchar(50) --Contiene el valor a ingresar por pantalla 
AS 
/****Vars*****/ 
DECLARE 
    @Result TABLE 
    (
     ClientesDisponibles int, 
     ClientesAgendados int 
    ) 
DECLARE 
    @SQL varchar(500),--Guarda la cantidad de clientes disponibles 
    @SQLAGENDADOS varchar(500) 

SET @SQL = 'SELECT COUNT(idtable) from table'; 
SET @SQL = 'SELECT COUNT(idtable2) from table2'; 

INSERT INTO @Result EXEC @SQL, [email protected]; 

SELECT 
    R.ClientesDisponibles, 
    R.ClientesAgendados 
FROM 
    @Result R 
RETURN 

編輯 異常說的

Column name or number of supplied values does not match table definition.

給予的和異常,但我沒有任何關於我在做什麼錯的想法。由於

+0

這裏有一個肯定的:你聲明@SQL是一個INT,但然後試圖設置它等於一個字符串。 – 2011-05-05 14:27:45

+0

@Joe Stefanelli抱歉,我的錯誤發佈了我已編輯的問題 – Jorge 2011-05-05 14:34:22

+0

您應該使用動態SQl作爲最後一招,而不是第一次嘗試。這裏根本就不需要動態sql。請閱讀以下鏈接,不要再考慮編寫任何動態SQl,直到您真正瞭解它:http://www.sommarskog.se/dynamic_sql.html – HLGEM 2011-05-06 14:26:01

回答

2

你不能鏈在一起的多EXEC通話這樣的,你缺少括號

你可以這樣做(和尼爾的點呢!)

INSERT INTO @Result(ClientesDisponibles) 
EXEC (@SQL) 

INSERT INTO @Result(ClientesAgendados) 
EXEC (@SQLAGENDADOS) 

雖然這會插入2個單獨的行。不知道爲什麼您沒有使用sp_executesql代替as per your previous question

+0

@馬丁我不能使用另一個存儲過程來處理公司在我工作的地方,還有其他的東西可以使插入同一行?感謝問我真的有幫助 – Jorge 2011-05-05 15:03:53

+0

@Jorge - 這是否需要動態SQL呢?如果是這樣,你可以將2個動態SQL腳本組合成一個腳本嗎? 'SELECT(從表中選擇COUNT(idtable)),(從table2中選擇COUNT(idtable2))' – 2011-05-05 15:10:07

+0

@Martin不幸的是它必須是一個動態查詢,但我不知道如何組合這兩個查詢 – Jorge 2011-05-05 15:24:54

2

它不會因爲在該行的工作:

DECLARE @SQL int

你需要爲了使用它作爲一個string申報@SQLVARCHAR@SQLAGENDADOS也是如此。

但是,您還應該看到有關鏈接多個執行的@Martins答案。

你爲什麼不執行以下操作:

DECLARE @Count1 INT; 
DECLARE @Count2 INT; 

SELECT @Count1 = COUNT(idtable) 
    FROM table; 

SELECT @Count2 = COUNT(idtable2) 
    FROM table2; 

INSERT INTO @Result 
    VALUES (@Count1, @Count2); 
+0

這不是問題,這是發佈問題的問題,但我修復了 – Jorge 2011-05-05 14:32:47

0
CREATE PROCEDURE Example 
@MAESTRDESC varchar(50) --Contiene el valor a ingresar por pantalla 
    AS 
/****Vars*****/ 
DECLARE 
    @Result TABLE 
    (
     ClientesDisponibles int, 
     ClientesAgendados int 
    ) 
DECLARE 
    @SQL int,--Guarda la cantidad de clientes disponibles 
    @SQLAGENDADOS int 

SELECT @SQL = COUNT(idtable) from [table] 
SELECT @SQLAGENDADOS = COUNT(idtable2) from [table2] 

INSERT @Result VALUES (@SQL, @SQLAGENDADOS) 

SELECT 
    R.ClientesDisponibles, 
    R.ClientesAgendados 
FROM 
    @Result R 
RETURN