Ich muss 1 Datensatz zu einer Zeit zu einer Tabelle senden (Ja 1 Datensatz zu einem Zeitpunkt). Ich habe diesen Code verwendet, um die @msg
Variable in SQL Server 2012 (es verwendet OFFSET).Verwendet OFFSET in SQL Server 2012 und ich brauche und antworte für SQL Server 2008
@msg
ist eine XML
Variable.
WHILE @Rowcount > 0
BEGIN
SELECT @Rowcount = @Rowcount - 1
SET @msg = '<rptlr>' + (SELECT * FROM Deleted rptlr_d ORDER BY VENDOR
OFFSET @Rowcount ROWS FETCH NEXT 1 ROWS ONLY FOR XML AUTO, ELEMENTS) + '</rptlr>'
IF @company IS NOT NULL
INSERT INTO RPTLR (company, winnam, ddf, action, msg, dsn)
VALUES (@company, 'APPU', '000354', 'delete', @msg, @dsn)
END
Ich habe versucht (und verwirrt), dies im Jahr 2008 einzurichten.
SET @msg = '<rptlr>' + (SELECT RANK() OVER (ORDER BY VENDOR) AS rank,*
FROM Deleted rptlr_d ORDER BY RANK WHERE rank = @Rowcount
FOR XML AUTO, ELEMENTS) + '</rptlr>'
mag diese nicht die WHERE
Oder wie diese dies nicht mag die WITH
I ROW_NUMBER()
SET @msg = '<rptlr>' + (WITH temp AS (SELECT ROW_NUMBER() OVER (ORDER BY VENDOR)
AS RowNum,* FROM Deleted rptlr_d)
SELECT * FROM temp WHERE @Rowcount = temp.RowNum FOR XML AUTO, ELEMENTS)
+ '</rptlr>'
verwenden, haben auch versucht, SELECT * (SELECT *, ROW_NUMBER() ....
Die OVER (Reihenfolge von) muss vorhanden sein, wenn RANK verwendet wird. Danke für die Antwort es funktioniert gut. Die Rptlr-Tabelle repliziert in das Web, und die Daten werden als Referenz für History verwendet. Mit Select * werden also alle Felder in der Tabelle abgerufen. –