Ejecutar Editar en un procedimiento almacenado basado en el valor de la base de datos -- sql campo con stored-procedure camp codereview Relacionados El problema

Execute edit in a stored procedure based on database value


2
vote

problema

Español

Tengo código a continuación, que se establece para verificar la fecha de DateToComplete , y si la fecha es de 2 semanas o más, cambie el estado de completo de 3 a 2.

es esta la mejor manera?

  USE [DB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create PROCEDURE [dbo].[spChanger]   AS BEGIN  Execute ('UPDATE [TblActions] SET Complete = 2 WHERE DateToComplete < Date.Now.AddDays(14) AND Complete = 3' )  END   
Original en ingles

I have code below which is set to check the date of DateToComplete, and if the date is 2 weeks or more ago, change the status of Complete from 3 to 2.

Is this the best way?

USE [DB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create PROCEDURE [dbo].[spChanger]   AS BEGIN  Execute ('UPDATE [TblActions] SET Complete = 2 WHERE DateToComplete < Date.Now.AddDays(14) AND Complete = 3' )  END 
     
   
   

Lista de respuestas

5
 
vote
vote
La mejor respuesta
 
  Create PROCEDURE [dbo].[spChanger]   AS BEGIN  Execute ('UPDATE [TblActions] SET Complete = 2 WHERE DateToComplete < Date.Now.AddDays(14) AND Complete = 3' )  END   

Su carcasa es inconsistente. Si prefiere palabras clave en mayúsculas, apégate a mayúsculas :)

  CREATE PROCEDURE [dbo].[spChanger]   AS BEGIN  EXECUTE ('UPDATE [TblActions] SET Complete = 2 WHERE DateToComplete < Date.Now.AddDays(14) AND Complete = 3' )  END   

El nombre del procedimiento es potencialmente problemático. "Cambiador" no dice nada sobre lo que está cambiando, y a medida que su base de datos crece, sin duda terminará preguntándose por qué no lo llamó algo a lo largo de las líneas de spUpdateTblActionsCompleteStatusCode .


¿Por qué estás ejecutando una cadena? ¿Por qué no solo hacer esto?

  CREATE PROCEDURE [dbo].[spChanger]   AS BEGIN      UPDATE TblActions       SET Complete = 2      WHERE DateToComplete < Date.Now.AddDays(14)        AND Complete = 3  END   

Ahora obtiene intellisense en SSMS (asumiendo SQL Server) y es mucho más difícil hacer un error tipográfico en un nombre de columna.


No creo que este script puede ejecutar este CREATE PROCEDURE . Date.Now.AddDays(14) no es válido T-SQL.

Dicho esto, creo que te estás perdiendo oportunidades para algunos parámetros. Lo haría así:

  CREATE PROCEDURE [dbo].[spUpdateTblActionsCompleteStatusCode]      @completeStatusValue INT = 2,     @daysDiff INT = 14,     @completeStatusFilter INT = 3 AS BEGIN      UPDATE TblActions       SET Complete = @completeStatusValue     WHERE DATEDIFF(d, DateToComplete, DATEADD(d, @daysDiff, GETDATE())) < @daysDiff       AND Complete = @completeStatusFilter  END   

Cuando su código ejecuta este procedimiento almacenado, si no se pasan parámetros, solo usará los valores predeterminados, y usted tiene la flexibilidad para pasar diferentes parámetros si / cuando lo necesite.

También recomiendo scripting su T-SQL como un 9988776665544337 , por lo que el script completo se vería así:

  USE [DB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO  IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[spUpdateTblActionsCompleteStatusCode]') AND type IN (N'P', N'PC')) DROP PROCEDURE [dbo].[spUpdateTblActionsCompleteStatusCode] GO  CREATE PROCEDURE [dbo].[spUpdateTblActionsCompleteStatusCode]      @completeStatusValue INT = 2,     @daysDiff INT = 14,     @completeStatusFilter INT = 3 AS BEGIN      UPDATE TblActions       SET Complete = @completeStatusValue     WHERE DATEDIFF(d, DateToComplete, DATEADD(d, @daysDiff, GETDATE())) < @daysDiff       AND Complete = @completeStatusFilter  END   
 
Create PROCEDURE [dbo].[spChanger]   AS BEGIN  Execute ('UPDATE [TblActions] SET Complete = 2 WHERE DateToComplete < Date.Now.AddDays(14) AND Complete = 3' )  END 

Your casing is inconsistent. If you prefer UPPERCASE keywords, stick to uppercase :)

CREATE PROCEDURE [dbo].[spChanger]   AS BEGIN  EXECUTE ('UPDATE [TblActions] SET Complete = 2 WHERE DateToComplete < Date.Now.AddDays(14) AND Complete = 3' )  END 

The name of the procedure is potentially problematic. "Changer" says nothing about what's changing, and as your database grows you'll certainly end up wondering why you didn't call it something along the lines of spUpdateTblActionsCompleteStatusCode.


Why are you executing a string? Why not just do this?

CREATE PROCEDURE [dbo].[spChanger]   AS BEGIN      UPDATE TblActions       SET Complete = 2      WHERE DateToComplete < Date.Now.AddDays(14)        AND Complete = 3  END 

Now you get IntelliSense in SSMS (assuming SQL Server) and it's much harder to make a typo on a column name.


I don't think this CREATE PROCEDURE script can run though. Date.Now.AddDays(14) isn't valid T-SQL.

That said I think you're missing opportunity for some parameters. I'd do it like this:

CREATE PROCEDURE [dbo].[spUpdateTblActionsCompleteStatusCode]      @completeStatusValue INT = 2,     @daysDiff INT = 14,     @completeStatusFilter INT = 3 AS BEGIN      UPDATE TblActions       SET Complete = @completeStatusValue     WHERE DATEDIFF(d, DateToComplete, DATEADD(d, @daysDiff, GETDATE())) < @daysDiff       AND Complete = @completeStatusFilter  END 

When your code runs this stored procedure, if no parameters are passed it will just use the default values, and you have the flexibility to pass different parameters if/when you need to.

Also I'd recommend scripting your T-SQL as a DROP+CREATE, so the full script would look like this:

USE [DB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO  IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[spUpdateTblActionsCompleteStatusCode]') AND type IN (N'P', N'PC')) DROP PROCEDURE [dbo].[spUpdateTblActionsCompleteStatusCode] GO  CREATE PROCEDURE [dbo].[spUpdateTblActionsCompleteStatusCode]      @completeStatusValue INT = 2,     @daysDiff INT = 14,     @completeStatusFilter INT = 3 AS BEGIN      UPDATE TblActions       SET Complete = @completeStatusValue     WHERE DATEDIFF(d, DateToComplete, DATEADD(d, @daysDiff, GETDATE())) < @daysDiff       AND Complete = @completeStatusFilter  END 
 
 
         
         

Relacionados problema

6  Procedimiento almacenado para describir la razón por la que un empleado en particular no es adecuado para una tarea en particular  ( Stored procedure to describe the reason that a particular employee is unsuitable ) 
Utilicé las siguientes preguntas de desbordamiento de la pila como referencias para escribir este código: Seleccionar columnas del conjunto de resultados ...

2  Unirse interno solo si satisface si la condición  ( Inner join only if satisfies if condition ) 
Estoy buscando revisión de código, y optimizaciones. Tengo dos tablas ItemCategory y ShopItemCategory itemcategory ------------------------------...

3  PROCEDIMIENTO ALMACENADO CON MUCHOS SI MOSSOS SIFICIONES SIF  ( Stored procedure with many if else if statement ) 
En este procedimiento almacenado (llamado por esta función de verificación de inventario ), muchos de ellos, si no se utilizan la instrucción. . ¿Cómo puede ...

2  Calidad de procedimiento almacenado SQL Server  ( Sql server stored procedure quality ) 
Soy principiante en la programación y recientemente he escrito un procedimiento almacenado bastante avanzado. Sobre la base de los parámetros con los que lo l...

3  Procedimiento almacenado para enviar correos electrónicos en tiempos específicos después de la expiración de la licencia  ( Stored procedure for sending emails at specified times after license expiration ) 
Necesito enviar notificaciones por correo electrónico para licencias caducadas: un día antes / después de la expiración Dos días antes / después de la ex...

3  Procedimiento almacenado para consultar tablas de datos personalizadas como SQL dinámico  ( Stored procedure to query custom data tables as dynamic sql ) 
Hay muchas cosas aquí, pero el fondo por lo que esto es necesario es que hay un esquema de conjunto, o un conjunto de tablas de 'núcleo' que están prefijadas ...

0  Búsqueda de opiniones de lugares  ( A search for reviews of places ) 
Este es el procedimiento almacenado que estoy usando para enumerar algunos lugares en mi sitio web. ¿Cómo puedo optimizarlo para funcionar bien? ¿Qué funcione...

7  Implementando patrón de repositorio y DAL con procedimientos almacenados  ( Implementing repository pattern and dal with stored procedures ) 
Uso de .NET 3.5, implementación del patrón de repositorio junto con Enterprise Library 5 y procedimientos almacenados. No usó EF, los procedimientos almacenad...

3  Buscando a través de tablas por un valor  ( Searching through tables for a value ) 
Tengo un procedimiento almacenado PL / SQL que busca una fila en 3 tablas diferentes (no todas las columnas son las mismas). La lógica va de la siguiente ma...

6  Inserción de múltiples filas en MySQL  ( Inserting multiple rows in mysql ) 
Estoy construyendo una tienda. Cuando un usuario decide realizar una compra, necesito almacenarlo en la base de datos, pero como la compra puede ser de más de...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos