问题出在哪儿

时间:2011-05-05 14:21:53

标签: sql-server-2005 tsql stored-procedures

我新的transact 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, EXEC@SQLAGENDADOS;

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

修改  例外说是

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

给予和例外,但我不知道我做错了什么。谢谢

3 个答案:

答案 0 :(得分:2)

由于这一行,它不起作用:

DECLARE @SQL int

您需要将@SQL声明为VARCHAR才能将其用作string@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);

答案 1 :(得分:2)

你不能把这样的多个EXEC电话连在一起,而你却错过了括号(而且Neil也是如此!)

你可以做到

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

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

这将插入2个单独的行。不知道你为什么没有sp_executesql使用此as per your previous question

答案 2 :(得分: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