Problemas de sintaxis y gramática del script Sql

Alguien me puede ayudar por favor no se que estoy haciendo mal:

IF EXISTS ( SELECT  name
        FROM    sys.tables
        WHERE   name = N'MemberIdsToDelete' ) 
DROP TABLE [MemberIdsToDelete];
GO

SELECT  mm.memberid ,
        mm.aspnetuserid ,
        mm.email ,
        mm.RowNum AS RowNum
INTO    #MemberIdsToDelete
FROM    membership.members AS mm
        LEFT JOIN aspnet_membership AS asp ON mm.aspnetuserid = asp.userid
        LEFT JOIN trade.tradesmen AS tr ON tr.memberid = mm.memberid
WHERE   asp.isapproved = 0
        AND tr.ImportDPN IS NOT NULL
    AND tr.importDPN <> ''
ORDER BY mm.memberid

DECLARE @MaxRownum INT
SET @MaxRownum = ( SELECT   MAX(RowNum)
                   FROM     #MemberIdsToDelete
                 )

DECLARE @Iter INT
SET @Iter = ( SELECT    MIN(RowNum)
              FROM      #MemberIdsToDelete
            )

DECLARE @MemberId INT
DECLARE @TrademId INT
DECLARE @UId UNIQUEIDENTIFIER
DECLARE @Successful INT
DECLARE @OutputMessage VARCHAR(200)
DECLARE @Email VARCHAR(100)
DECLARE @Username VARCHAR(100)

SELECT  @MemberId = memberId ,
        @UId = AspNetUserId
FROM    MemberIdsToDelete
SELECT  @TrademId = TradesManId
FROM    trade.TradesMen
WHERE   memberId = @MemberId;

WHILE @Iter <= @MaxRownum 
  BEGIN
    SELECT  *
    FROM    #MemberIdsToDelete
    WHERE   RowNum = @Iter
  --more code here
    SET @Iter = @Iter + 1
  END

Solo quiero verificar si mi tabla MemberIdsToDelete existe, si es así, suéltela, cree MemberIdsToDelete con los resultados establecidos desde el ciclo de selección a través de la tabla MemberIdsToDelete y realice operaciones

Recibo el error de que RowNum no existe

preguntado el 28 de agosto de 12 a las 10:08

2 Respuestas

Para empezar, para verificar si existe una tabla y luego colocarla en consecuencia, debe usar algo como

IF EXISTS (SELECT name 
           FROM sys.tables 
           WHERE name = N'MemberIdsToDelete') 
DROP TABLE [MemberIdsToDelete];
GO

en cuanto al error, su columna RowNum no existe cuando intenta hacer referencia a ella. Incluirlo en la instrucción SELECT

select mm.memberid, mm.aspnetuserid, mm.email, mm.RowNum AS RowNum    
into #MemberIdsToDelete     
from membership.members as mm      
    left join aspnet_membership as asp       
        on mm.aspnetuserid=asp.userid       
            left join trade.tradesmen as tr       
                on tr.memberid=mm.memberid       
where asp.isapproved = 0 and tr.ImportDPN IS NOT NULL 
    and tr.importDPN <> '' 
order by mm.memberid;
GO  

Espero que esto ayude.

Editar. Basado en su error adicional de su comentario. Ahora está intentando acceder a una tabla temporal que no existe. Primero debe llenar la tabla temporal #MemberIdsToDelete antes de intentar leerlo. El error de columna no válida se debe al mismo problema. Está intentando leer una columna llamada RowNum de la tabla temporal que no existe.

Editar2. Retire el '#' de la #MemberIdsToDelete. Está insertando en una tabla, no en una tabla temporal. O bien, agregue un # al select into arriba (ver el código arriba). Esto lo convertirá en una tabla temporal según sea necesario.

Respondido 28 ago 12, 12:08

Todavía recibo errores en: Nombre de columna no válido 'RowNum'. y el nombre de objeto no válido '#MemberIdsToDelete' con respecto a si existe, sí, conozco MySql al revés, pero sql es otra historia :) - gato_charlie

gracias, entonces, para crear la tabla temporal, ¿puedo ejecutar la selección? que probé y aún obtuve un error con el nombre de columna no válido "RowNum' - gato_charlie

gracias, pero sigo quejándome del número de fila como nombre de columna no válido. Agregué un # a "en #MemberIdsToDelete". Al ver que es una tabla temporal, ¿ahora uno debería poder agregar una columna de usuario? - gato_charlie

en la línea: "seleccione mm.memberid, mm.aspnetuserid, mm.email, mm.RowNum AS RowNum" - gato_charlie

Amigo, la declaración selecta que escribí, muestra un ejemplo de cómo selecciona RowNum en su tabla temporal. Debe asegurarse de que realmente haya una tabla llamada RowNum en la base de datos membership.members. Si no hay uno, no puede esperar seleccionarlo... - Caballero de la Luna

No tiene una columna RowNum en esa tabla.

Tratar:

seleccione mm.memberid, mm.aspnetuserid, mm.email, row_number() sobre (ordenar por (seleccione 1)) como RowNum ....

Esto debería resolver su problema, pero en realidad no recomendaría esta idea de recorrer los que se eliminarán.

Respondido 28 ago 12, 10:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.