我环顾四周寻找一个类似的问题(我确定在某个地方有一个)但找不到一个问题.
我有一个ID列表,对于每个ID,我需要将该ID行的另一列更新为相同的字符串.
基本上,我想要这样的东西:
List<int> uniqueIDs;
UPDATE my_table
SET certainColumn = "foo bar"
WHERE uniqueID = uniqueIDs[0]
OR uniqueID = uniqueIDs[1]
...
OR uniqueID = uniqueID[uniqueIDs.Length-1]
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过在for/foreach循环中包含它来实现,但我想知道是否有更好的方法来完成这个,可能在一个数据库连接中?
任何帮助是极大的赞赏.
好吧,你可以使用TVP.首先,在您的服务器上创建它:
CREATE TYPE dbo.UniqueIDs AS TABLE(ID INT PRIMARY KEY);
Run Code Online (Sandbox Code Playgroud)
然后是一个存储过程:
CREATE PROCEDURE dbo.UpdateByID
@tvp dbo.UniqueIDs READONLY
AS
BEGIN
SET NOCOUNT ON;
UPDATE t SET certainColumn = 'foo bar'
FROM dbo.my_table AS t
INNER JOIN @tvp AS tvp
ON t.uniqueID = tvp.ID;
END
Run Code Online (Sandbox Code Playgroud)
要么:
CREATE PROCEDURE dbo.UpdateByID
@tvp dbo.UniqueIDs READONLY
AS
BEGIN
SET NOCOUNT ON;
UPDATE t SET certainColumn = 'foo bar'
FROM dbo.my_table AS t
WHERE EXISTS (SELECT 1 FROM @tvp
WHERE ID = t.uniqueID);
END
Run Code Online (Sandbox Code Playgroud)
然后,而不是List使用a DataTable来保存您的C#应用程序中的ID,并调用存储过程,@tvp作为Structured参数传递.我在本网站上发布了简单的C#端示例:
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |