我知道这是一个非常简单的SQL例程,所以我很困惑为什么它实际上没有更新。
这些完全靠自己工作:
class HumanClassification:
def __init__(self):
self.age = 0
self.height = 0
self.gender = []
def classification(self, age, height, gender):
self.age = age
self.height = height
self.gender = gender
bob = HumanClassification.classification(32, 6, 'male')
print (bob.age)
但是当我尝试将它们变成存储过程时,它们似乎没问题并执行正常,但没有更新。
UPDATE ourwebsite.dbo.dealer
SET Active = 0
WHERE dealercode = 12345
UPDATE ourwebsite.dbo.reps
SET username = username + '_LR-3.0'
WHERE dealercode = 12345
我相信我一定错过了什么?
感谢您的关注。
答案 0 :(得分:0)
您尚未指定参数的长度
@DealerCode VARCHAR
所以默认情况下,它采用VARCHAR(1)。您可以在程序中打印或选择@DealerCode来检查相同的内容。
答案 1 :(得分:0)
来自您的查询
UPDATE ourwebsite.dbo.dealer
SET Active = 0
WHERE dealercode = 12345
UPDATE ourwebsite.dbo.reps
SET username = username + '_LR-3.0'
WHERE dealercode = 12345
我认为经销商代码类型是数字,因为您没有在12345上放置(' ...'),您可以尝试这个我对其进行一些修改的查询
AS @DealerCode NUMERIC
BEGIN TRANSACTION
BEGIN TRY
SET NOCOUNT ON;
UPDATE ourwebsite.dbo.dealer
SET Active = 0
WHERE DealerCode = @DealerCode
UPDATE ourwebsite.dbo.reps
SET username = username + '_LR-3.0'
WHERE DealerCode = @DealerCode
-- Commit the updates into the table
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- Execute rollback upon error retrieval routine.
ROLLBACK TRANSACTION
END CATCH;
答案 2 :(得分:0)
在没有看到整个过程的情况下很难,因为底部有一个END TRY
而没有BEGIN TRY
,所以你的语句甚至可能都没有执行,因为执行会跳转到{ {1}}。还要确保在没有提交的情况下没有开始交易。
除此之外,您的手动查询与您的过程之间存在差异,即CATCH
数据类型。在您的手动查询中,@DealerCode
(或数字)在您的SP中是INT
未声明的长度。检查VARCHAR
表中dealercode
列的数据类型,确保您的变量类型相同。同时始终指明ourwebsite.dbo.reps
字段的长度。
测试以下代码,将更新您的记录,因为它与您的独立查询相同:
VARCHAR
如果此方法有效,请删除CREATE PROCEDURE dbo.TestUpdate
@dealercode INT
AS
BEGIN
UPDATE ourwebsite.dbo.dealer
SET Active = 0
WHERE dealercode = @dealercode
UPDATE ourwebsite.dbo.reps
SET username = username + '_LR-3.0'
WHERE dealercode = @dealercode
END
... BEGIN TRY
和整个END TRY
以查看您收到的错误,或确保执行CATCH
使用相应的RAISERROR
捕获。例如:
ERROR_MESSAGE()