У меня есть эта таблица прямо сейчасКак обновить столбец через Row_Number с другим значением для каждой строки?
CREATE TABLE [dbo].[DatosLegales](
[IdCliente] [int] NOT NULL,
[IdDatoLegal] [int] NULL,
[Nombre] [varchar](max) NULL,
[RFC] [varchar](13) NULL,
[CURP] [varchar](20) NULL,
[IMSS] [varchar](20) NULL,
[Calle] [varchar](100) NULL,
[Numero] [varchar](10) NULL,
[Colonia] [varchar](100) NULL,
[Pais] [varchar](50) NULL,
[Estado] [varchar](50) NULL,
[Ciudad] [varchar](50) NULL,
[CodigoPostal] [varchar](10) NULL,
[Telefono] [varchar](13) NULL,
[TipoEmpresa] [varchar](20) NULL,
[Tipo] [varchar](20) NULL,
CONSTRAINT [PK_DatosLegales] PRIMARY KEY CLUSTERED
(
[IdCliente] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
мне нужно обновить столбец IdDatoLegal. Прямо сейчас у меня есть 80 строк на этой таблице, поэтому мне нужно обновить каждую строку с номерами 1, 2, 3 ... 79, 80.
Я пробовал простые запросы к хранимым процедурам без каких-либо успехов.
У меня есть эта процедура хранит прямо сейчас:
ALTER PROCEDURE dbo.ActualizarDatosLegales
@RowCount int
AS
DECLARE @Inicio int
SET @Inicio = 0
WHILE @Inicio < @@RowCount
SET @Inicio += 1;
BEGIN
UPDATE DatosLegales SET IdDatoLegal = @Inicio WHERE (SELECT ROW_NUMBER() OVER (ORDER BY IdCliente) AS RowNum FROM DatosLegales) = @Inicio;
END
возвращает это сообщение, когда я запустить его
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Я предполагаю, что это потому, что в подзапрос (SELECT row_number() OVER (ORDER BY IdCliente) AS RowNum FROM DatosLegales), он возвращает 80 строк, где он должен только возвращать один (но каждый раз он должен быть разным числом.
Знаете ли вы, что мне нужно добавить в подзапрос, чтобы заставить его работать? и, прежде всего, правилен ли цикл и остальная процедура?
заранее спасибо
вы используете SQL Server? – luchosrock
@luchosrock. Синтаксис, разделители квадратной скобки и сообщение об ошибке указывают на SQL Server (хотя, возможно, Sybase, если у этого есть те же сообщения об ошибках, которые я предполагаю). –