我有一些 SQL,我正在通过盲目要求/请求将其转换为存储过程。我正在查看的应用程序中有一些 SQL 使用动态 IN (set) 语句构建 where 子句。我搜索了动态存储过程,但没有找到与我正在寻找的东西相近的东西。这是 WHERE 子句的示例:
WHERE Var.A = @Param AND Var.Id IN
从这里开始,使用字符串生成器手动构建 SQL,然后执行。不确定如何将其转换为存储过程,因为我对他们来说还很陌生。
我们正在使用 C# 和 SQL Server
最佳答案
您可以使用用户定义的数据类型。
在 C# 方面,它看起来像这样:
//Setup a DataTable with the same structure as the SQL Type
var data = new DataTable();
data.Columns.Add("value", typeof(string));
//Populate the table
data.Rows.Add("oneID");
data.Rows.Add("anotherID");
//You create your sql command
cmd.Parameters.Add("@listArgument", data);
//Command execution
在 SQL 端你可以有这样的类型
CREATE TYPE [dbo].[NVarCharTable] AS TABLE (
[value] NVARCHAR(MAX) NOT NULL);
然后是存储过程:
CREATE PROCEDURE [dbo].[MyProc]
@listArgument NVarCharTable READONLY
AS
BEGIN
SELECT *
FROM FOO
WHERE Var.Id IN (Select [value] FROM @listArgument)
END
引用:https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters
关于c# - 如何使用动态创建的 IN 集创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597671/