如何有条件地更新 SQL 中的 text/ntext 字段?

发布于 2024-08-07 03:01:13 字数 300 浏览 4 评论 0原文

在存储过程中,我尝试有条件地更新一个字段(如下面 SQL 语句中的第二行)

UPDATE [some_stuff] SET
  last_update = CASE WHEN val = @NewVal THEN last_update ELSE GETDATE() END,
  val = @NewVal

...但是对于 text/ntext 字段。最有效的方法是什么?它是否必须是单独的 UPDATETEXT 语句?我必须先执行额外的 SELECT 操作吗?

In a stored procedure I'm trying to conditionally update a field (like the 2nd line in the SQL statement below)

UPDATE [some_stuff] SET
  last_update = CASE WHEN val = @NewVal THEN last_update ELSE GETDATE() END,
  val = @NewVal

...but for a text/ntext field. What's the most efficient way to go about doing that? Does it have to be a separate UPDATETEXT statement? And do I have to do an extra SELECT first?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

从来不烧饼 2024-08-14 03:01:13

上面的示例适用于 SQL Server 2005,其中 val 是一个文本字段,并且您要更新整个值。如果您仅替换字段的一部分,请在单独的语句中使用 UPDATETEXT。

如果可以更新架构,更好的解决方案是使用 VARCHAR(MAX) 或 NVARCHAR(MAX) 列。 UPDATETEXT 命令在 SQL Server 的未来版本中已被标记为已弃用。如果您使用这些数据类型,则可以在 UPDATE 语句中使用 column_name.WRITE 来替换部分值。

The above example will work in SQL Server 2005 where val is a Text field and you're updating the whole value. If you're only replacing part of a field then use UPDATETEXT in a separate statement.

A better solution, if you can update the schema is to use VARCHAR(MAX) or NVARCHAR(MAX) columns. The UPDATETEXT command has been marked as deprecated in a future release of SQL Server. If you're using these data types then you can use the column_name.WRITE in the UPDATE statement to replace part of a value.

冷情 2024-08-14 03:01:13

也许这个例子不现实,但是你不能将其简化为:

UPDATE [some_stuff] 
SET last_update =  GETDATE()
WHERE val != @NewVal

案例的前半部分只是将字段设置为自身,这似乎有点毫无意义。

Maybe the example isn't realistic, but couldn't you simplify this down to:

UPDATE [some_stuff] 
SET last_update =  GETDATE()
WHERE val != @NewVal

The first half of the case just sets the field to itself, which seems kinda pointless.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文