如何有条件地更新 SQL 中的 text/ntext 字段?
在存储过程中,我尝试有条件地更新一个字段(如下面 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
上面的示例适用于 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.
也许这个例子不现实,但是你不能将其简化为:
案例的前半部分只是将字段设置为自身,这似乎有点毫无意义。
Maybe the example isn't realistic, but couldn't you simplify this down to:
The first half of the case just sets the field to itself, which seems kinda pointless.