Maison > base de données > tutoriel mysql > Comment transmettre correctement les paramètres UNIQUEIDENTIFIER dans Dynamic T-SQL à l'aide de sp_executesql ?

Comment transmettre correctement les paramètres UNIQUEIDENTIFIER dans Dynamic T-SQL à l'aide de sp_executesql ?

Patricia Arquette
Libérer: 2025-01-03 12:47:39
original
577 Les gens l'ont consulté

How to Correctly Pass UNIQUEIDENTIFIER Parameters in Dynamic T-SQL using sp_executesql?

Passer des paramètres dans le T-SQL dynamique à l'aide de sp_executesql

Dans le T-SQL dynamique, transmettre des paramètres aux requêtes exécutées à l'aide de sp_executesql peut être un défi . Cet article aborde un problème courant rencontré lors de l'utilisation de SQL dynamique avec des clauses WHERE attendant des paramètres UNIQUEIDENTIFIER.

Considérons l'exemple suivant, où l'instruction sp_executesql ne contient pas la liaison de paramètre nécessaire :

CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */
(
@p_CreatedBy UNIQUEIDENTIFIER
)
AS
DECLARE @sql NVARCHAR(4000)
SET @sql ='

DECLARE @p_CreatedBY UNIQUEIDENTIFIER

SELECT 
  DateTime,
  Subject,
  CreatedBy
FROM
(
  SELECT 
    DateTime, Subject, CreatedBy, 
    ROW_NUMBER() OVER(ORDER BY DateTime ) AS Indexing
  FROM
    ComposeMail
  WHERE 
    CreatedBy = @p_CreatedBy /* <--- the problem is in this condition */
) AS NewDataTable
'

EXEC sp_executesql @sql
Copier après la connexion

Quand cette procédure est exécutée, la condition de la clause WHERE échouera car le paramètre @p_CreatedBy n'est pas lié au SQL dynamique requête.

Pour résoudre ce problème, les paramètres doivent être explicitement transmis à sp_executesql. Selon MSDN, la syntaxe correcte est :

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
Copier après la connexion

Cela garantit que le paramètre @p_CreatedBy est affecté au paramètre @p dans l'instruction SQL dynamique, permettant à la clause WHERE d'évaluer correctement la condition.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal