exécuter sp_executesql utiliser des variables pour obtenir la valeur de retour


最近用到,在网上查了下资料
注意加粗部分,sp_executesql 的参数必须为UNICODE,即NCHAR,NVARCHAR,NTEXT型,否则报错

Grammaire de base de l'instruction SQL dynamique
1: Exec exécute    
   
Select * from tableName
Exec ('select * from tableName')
Exec sp_executesql N'select * from tableName '- veuillez noter que N doit être ajouté avant la chaîne

2: field Nom, nom de table, nom de base de données, etc. en tant que variables, vous devez utiliser du SQL dynamique,

par exemple:
déclarer @fname varchar (20)
set @fname = 'FiledName'
Sélectionnez @fname dans tableName-error, aucune erreur ne sera demandée, mais le résultat est La valeur fixe FiledName n'est pas requise.
Exec ( « select » + @fname + « de tableName ») - Remarque entre guillemets simples avant et après les espaces de pointe ainsi que

bien sûr les variables de chaîne peuvent également changer
DECLARE @fname VARCHAR (20 est)
SET @fname = 'FiledName' --Définir le nom du champ

déclarer @s varchar (1000)
set @s = 'sélectionner' + @fname + 'dans tableName'





Nvarchar (1000) -Notez qu'ici changé en nvarchar (1000)
set @s = 'select' + @fname + 'from tableName'
Exec (@s) -successful
exec sp_executesql @ s-cette phrase est correcte

3. Sortie Les paramètres
déclarent @num int,
@sqls nvarchar (4000)
set @ sqls = 'select count (*) from tableName'
exec (@sqls) -comment
placer le résultat d'exécution de exec dans une variable?

declare @num int,    
   @sqls nvarchar (4000)
set @ sqls = 'select @ a = count (*) from tableName'
exec sp_executesql @ sqls, N '@ a int output', @ num output
select @numSi    
c'est le sien Il existe des paramètres dans la procédure stockée, vous pouvez également utiliser sp_executesql directement

CREATE PROCEDURE demo
@test varchar (100)
as
return 1
go
declare @name int
exec @ name = demo 'test'
select @name

Il ne peut y avoir aucune fonction dans les paramètres de la démonstration de la procédure stockée
. Si vous souhaitez passer un newid (), vous devez utiliser des variables locales. Notez
que la valeur de retour de la procédure stockée doit être un entier
declare @id
declare @name int
exec @ name = demo @id
select @name

aide mssql

Exécutez des instructions ou des lots Transact-SQL qui peuvent être réutilisés plusieurs fois ou générés dynamiquement. Les instructions ou lots Transact-SQL peuvent contenir des paramètres intégrés.

La grammaire

sp_executesql [ @stmt = ] stmt
[
   
{ , [ @params = ] N @ # @ nom_paramètre type_données [ , ... n ] @ # }
     { , [ @ param1 = ] @ # valeur1 @ # [ , ... n ] }
]

Paramètre

[ @stmt = ] stmt

Contenant des instructions Transact-SQL ou un lot de chaînes Unicode, stmt doit être une constante ou une variable Unicode qui peut être implicitement convertie en ntext . Les expressions Unicode plus complexes ne sont pas autorisées (par exemple, utilisez l'opérateur + pour concaténer deux chaînes). Les constantes de caractères ne sont pas autorisées. Si vous spécifiez une constante, vous devez utiliser N comme préfixe. Par exemple, la constante Unicode N @ # sp_who @ # est valide, mais la constante de caractère @ # sp_who @ # n'est pas valide. La taille de la chaîne n'est limitée que par la mémoire disponible du serveur de base de données.

stmt peut contenir des paramètres sous la même forme que des noms de variables, par exemple:

N@#SELECT * FROM Employees WHERE EmployeeID = @IDParameter@#

Chaque paramètre contenu dans stmt doit avoir un élément correspondant dans la liste de définitions de paramètres @params et la liste de valeurs de paramètres.

[ @params = ] N @ # @ nom_paramètre type_données [ , ... n ] @ #

Une chaîne contenant les définitions de tous les paramètres intégrés dans stmt . La chaîne doit être une constante ou une variable Unicode qui peut être implicitement convertie en ntext . Chaque définition de paramètre se compose du nom du paramètre et du type de données. n est un espace réservé indiquant une définition de paramètre supplémentaire. Chaque paramètre spécifié dans stmt doit être défini dans @params . Si l'instruction Transact-SQL ou le lot dans stmt ne contient aucun paramètre, @params n'est pas requis . La valeur par défaut de ce paramètre est NULL.

[ @ param1 = ] @ # value1 @ #

La valeur du premier paramètre défini dans la chaîne de paramètres. La valeur peut être une constante ou une variable. La valeur du paramètre doit être fournie pour chaque paramètre contenu dans stmt . Si l'instruction Transact-SQL ou le lot inclus dans stmt n'a pas de paramètres, aucune valeur n'est requise.

n

Espace réservé pour la valeur des paramètres supplémentaires. Ces valeurs ne peuvent être que des constantes ou des variables, pas des expressions plus complexes, telles que des fonctions ou des expressions générées à l'aide d'opérateurs.

Valeur du code retour

0 (succès) ou 1 (échec)

Ensemble de résultats

Renvoie un jeu de résultats à partir de toutes les instructions SQL qui génèrent des chaînes SQL.


Exemple (merci à Zou Jian d'avoir fourni)

declare @user varchar(1000)
declare @moTable varchar(20)
select @moTable = @#MT_10@#




declare @sql nvarchar(4000) --定义变量,注意类型
 

set @sql=@#select @user = count(distinct userid) from @#+@moTable --为变量赋值
 
--执行@sql中的语句
exec sp_executesql @sql
,N@#@user varchar(1000) out@# --表示@sql中的语句包含了一个输出参数
,@user out                   --和调用存储过程差不多,指定输出参数值
 
print @user


 

发布了18 篇原创文章 · 获赞 4 · 访问量 4万+

Je suppose que tu aimes

Origine blog.csdn.net/caoming51021/article/details/8086796
conseillé
Classement