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
507 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!

source:php.cn
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