Problemas de sintaxis y gramática del script Sql
Frecuentes
Visto 306 veces
0
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
2 Respuestas
0
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
0
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 sql-server tsql or haz tu propia pregunta.
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