CREATE PROCEDURE dbo.test2
AS
BEGIN
DECLARE @status as int
DECLARE @error as int
SET @status = 1
SET @Error = @@ERROR
UPDATE dbo.BView
SET bview='dar'
WHERE pt='foo'
IF @Error > 0
print 'ERROR'
else
SELECT @status as 'status'
END;
为什么此查询始终返回局部变量@status
的默认值,而不管分配给它的是什么?
status
------
0
服务器版本:MS SQL Server 2014 Express
答案 0 :(得分:0)
在sql server 2005中:在sql server中运行它。
您无法在声明时指定默认值。
并将结果发布到命令中。
DECLARE @status int
SET @status = 1
SELECT @status as 'status'
答案 1 :(得分:0)
建议。虽然找不到一些不妥之处,但为什么不按正常方式去做。
始终在更新,插入或执行任何操作之前先声明变量。
CREATE PROCEDURE dbo.sp_test2
AS
BEGIN
DECLARE @status as int
SET @status = 1
UPDATE dbo.BView
SET bview='dar'
WHERE pt='foo'
SELECT @status as 'status'
END
第二个始终使用关键字AS
然后使用变量类型,后跟大小。如果你不遵循变量大小,它通常返回0,请注意nvarchar类型/ varchar类型。示例
DECLARE @status as nvarchar
对长度为20的字符串使用时经常返回0。在哪里,
Declare @status as nvacrhar(20)
工作正常。
您的更新/插入等进程中可能存在错误,我可以看到您将声明和选择进程放在同一节点中(即开始和结束)。您可以检查类似的错误。
CREATE PROCEDURE dbo.sp_test2
AS
BEGIN
DECLARE @status as int
DECLARE @error as int
SET @status = 1
SET @Error = @@ERROR
--Some statement, update or insert, let's say:
UPDATE dbo.BView
SET bview='dar'
WHERE pt='foo'
IF @Error > 0
print 'ERROR'
else
SELECT @status as 'status'
END
这些是建议,但我经常这样做,它永远不会让我失望。更好地理解SQL Here和中的变量。在MSSql here中引发错误等等。希望它有所帮助。