SQL Server:在某些进程后选择本地变量

时间:2014-11-07 09:04:39

标签: sql-server local-variables

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

2 个答案:

答案 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中引发错误等等。希望它有所帮助。