如何在WHERE CLAUSE中使用DECLARE变量

时间:2017-01-04 19:33:09

标签: sql sql-server

我想插入和检索插入的行,如下所示:

DECLARE @ultimo int;

INSERT INTO pv_mensaje
(
reporte ,
tipo_emisor ,
emisor ,
tipo_receptor,
receptor,
mensaje,
registro


)  VALUES (1158,'cliente',6,'',0,'MMMM' ,GETDATE())  ;
SET @ultimo = (SELECT SCOPE_IDENTITY());
SELECT * FROM pv_mensaje WHERE id = (@ultimo)

但是发给我这个错误:

错误报告 - 行位置22'='预期字符的无效JDBC转义语法。

3 个答案:

答案 0 :(得分:0)

添加:

DECLARE @sql varchar(max)
DECLARE @ultimo int;

INSERT INTO pv_mensaje
(
reporte ,
tipo_emisor ,
emisor ,
tipo_receptor,
receptor,
mensaje,
registro


)  VALUES (1158,'cliente',6,'',0,'MMMM' ,GETDATE())  ;
SET @ultimo = (SELECT SCOPE_IDENTITY());

Set @sql = 'SELECT * FROM pv_mensaje WHERE id = ('+ @ultimo +')'
Exec (@sql)

或:

DECLARE @ultimo int;

    INSERT INTO pv_mensaje
    (
    reporte ,
    tipo_emisor ,
    emisor ,
    tipo_receptor,
    receptor,
    mensaje,
    registro


    )  VALUES (1158,'cliente',6,'',0,'MMMM' ,GETDATE())  ;
    SET @ultimo = (SELECT SCOPE_IDENTITY());
   SELECT * FROM pv_mensaje WHERE id =  @ultimo

答案 1 :(得分:0)

你可以这样做

SELECT  @ultimo = SCOPE_IDENTITY());

现在您声明的变量将设置为该值。

然后

Set @sql = 'SELECT * FROM pv_mensaje WHERE id = ('+ @ultimo +')'
Exec (@sql)

答案 2 :(得分:0)

我想它是MS SQL Server。这是另一种选择

DECLARE @ultimo_tbl TABLE ( ID INT );

CREATE TABLE #pv_mensaje
    (
      reporte INT IDENTITY ,
      tipo_emisor INT ,
      emisor INT ,
      tipo_receptor INT ,
      receptor INT ,
      mensaje INT ,
      registro INT
    );



INSERT  INTO #pv_mensaje
        ( reporte ,
          emisor ,
          tipo_receptor ,
          tipo_emisor ,
          receptor ,
          mensaje ,
          registro
        )
OUTPUT  Inserted.reporte
        INTO @ultimo_tbl
VALUES  ( 1 ,
          1 ,
          1 ,
          1 ,
          1 ,
          1
        );


SELECT  *
FROM    #pv_mensaje  WHERE pv.reporte IN (SELECT MAX(ID) FROM @ultimo_tbl);