Jac*_*ack 5 database stored-procedures sql-delete
我有存储过程:
ALTER PROCEDURE [dbo].[k_ShoppingCart_DELETE]
@cartGUID nvarchar
AS
DELETE FROM
[dbo].[k_ShoppingCart]
WHERE
CartGUID = @cartGUID
Run Code Online (Sandbox Code Playgroud)
当我执行这个时,
exec dbo.k_ShoppingCart_DELETE '32390b5b-a35a-4e32-8393-67d5629192f0'
Run Code Online (Sandbox Code Playgroud)
结果:0行受影响.
但是,当我尝试这个查询时:
Delete FROM k_ShoppingCart Where CartGUID = '32390b5b-a35a-4e32-8393-67d5629192f0'
Run Code Online (Sandbox Code Playgroud)
结果:2行受影响.
这有什么问题?
如果您坚持使用 NVARCHAR 而不是 UNIQUEIDENTIFIER,则需要指定大小:
@cartGUID nvarchar(36)
Run Code Online (Sandbox Code Playgroud)
如果没有它,您的 guid 将被截断(至 30 个字符)。
您可以通过运行工作查询的修改版本来确认此行为:
DECLARE @cart nvarchar, @sizedcart nvarchar(36)
SET @cart = '32390b5b-a35a-4e32-8393-67d5629192f0'
SET @sizedcart = '32390b5b-a35a-4e32-8393-67d5629192f0'
-- works
Delete FROM k_ShoppingCart Where CartGUID = '32390b5b-a35a-4e32-8393-67d5629192f0'
-- will not work
Delete FROM k_ShoppingCart Where CartGUID = @cart
-- should work
Delete FROM k_ShoppingCart Where CartGUID = @sizedcart
Run Code Online (Sandbox Code Playgroud)
不过,我同意@Marc Gravell 的观点,uniqueidentifier 是解决问题的方法。
| 归档时间: |
|
| 查看次数: |
9393 次 |
| 最近记录: |