gpt4 book ai didi

c# - 如何使用 where @para1 = @para2 等参数执行 Sql server 过程

转载 作者:行者123 更新时间:2023-11-30 16:30:22 25 4
gpt4 key购买 nike

我有一个带有单个 select 语句的过程。我需要创建大约 50 个过程,如下所示。

create procedure foo1 as 
select cityid, cityname from footballteam

footballteam 在我的所有程序中都很常见,我不想创建 50 个单独的程序,而是像下面这样编写代码并从我的 C# 页面发送 3 个参数

create procedure foo1 (@id bigint, @name varchar(50), @param bigint)as 
select @id, @name from footballtem where @id =@param

我可以在 sql server 中像这样传递吗?/如何这样做

我能在 sql server 中做过程重载吗,有时我只需要传递两个参数,我想得到一个特定的值,我会传递三个或更多参数...... .

最佳答案

对于纯 TSQL 答案:

create table footballtem(id int identity(1,1),cityid int, cityname varchar(50))
go
insert footballtem(cityid, cityname) values (123, 'abc')
insert footballtem(cityid, cityname) values (456, 'def')
go
create procedure foo1 (@id sysname, @name sysname, @param bigint) as
declare @sql nvarchar(100) = 'select ' + QUOTENAME(@id) + ','
+ QUOTENAME(@name) + ' from footballtem where '
+ QUOTENAME(@id) + '=@param'
exec sp_ExecuteSql @sql, N'@param bigint', @param
go
exec foo1 'cityid','cityname',123

(感谢 Mikael Eriksson re QUOTENAME)

请注意,QUOTENAME 使 @name@id 注入(inject)安全。

但还要注意,可变 参数 (@param) 是安全的,不会被注入(inject)——我们不需要在任何地方验证它;并且这将允许通过 sp_ExecuteSql

重用查询计划

关于c# - 如何使用 where @para1 = @para2 等参数执行 Sql server 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com