首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储过程可以在management studio中正确执行,但不能在生产环境中正确执行

存储过程可以在management studio中正确执行,但不能在生产环境中正确执行
EN

Stack Overflow用户
提问于 2010-08-31 06:14:54
回答 4查看 1.1K关注 0票数 0

当我从SQL Server Management Studio执行存储过程时,我有一个可以正常工作的存储过程。不幸的是,它在生产服务器上的行为与此不同。在insert语句中,它只插入一些值,其余的值为NULL。空值来自用户定义的标量函数调用(从Management Studio执行时也可以正常工作)。有没有人遇到过类似的事情?我认为这可能是权限问题,但我使用生产连接凭据通过Management Studio连接到数据库,并看到了相同的行为。我是一个通常使用ORM的C#开发人员,所以我绝对不是SQL专家。提前谢谢了,伙计们。

代码如下:

代码语言:javascript
复制
BEGIN 
    DECLARE @UserExists int 
    SET @UserExists = 0
    SELECT @UserExists = COUNT(*) FROM UserPass WHERE UserId = @UserID AND PortalID = @PORTALID


    --If the Action is add and a User Exists change the Action to EDT (Update)
    IF @Action = 'ADD' AND @UserExists > 0 
     SET @Action = 'EDT'

    --Get All Of the Properties for this User
    DECLARE @EMAIL nvarchar(255)
    DECLARE @FIRSTNAME nvarchar(50) 
    DECLARE @LASTNAME nvarchar(50) 
    DECLARE @GENDER char(1) 
    DECLARE @BIRTHDATE smalldatetime 
    DECLARE @ADDRESS nvarchar(50)
    DECLARE @CITY nvarchar(50) 
    DECLARE @STATE nchar(2) 
    DECLARE @COUNTRY nvarchar(50) 
    DECLARE @POSTALCODE nvarchar(10) 
    DECLARE @TELEPHONE nvarchar(20) 
    DECLARE @CELL nvarchar(20) 
    DECLARE @EMAILPERMISSION bit 
    DECLARE @TEXTPERMISSION bit 
    DECLARE @UPDATEDIRECTION nvarchar(3)

    BEGIN TRY
      SELECT @BIRTHDATE = CAST(dbo.GetPropertyValue(@PORTALID,@USERID,'Birthdate') AS SmallDatetime)

    END TRY
    BEGIN CATCH
      SELECT  @BIRTHDATE = NULL
    END CATCH

    SELECT @EMAIL = Email,
        @FIRSTNAME = dbo.Proper(Firstname), 
        @LASTNAME = dbo.Proper(Lastname),
        @GENDER = dbo.GetPropertyValue(@PORTALID,@USERID,'Gender'),
        @ADDRESS = dbo.GetPropertyValue(@PORTALID,@USERID,'Street'), 
        @CITY = dbo.Proper(dbo.GetPropertyValue(@PORTALID,@USERID,'City')), 
        @STATE = Upper(dbo.GetState(dbo.GetPropertyValue(@PORTALID,@USERID,'Region'))), 
        @COUNTRY = dbo.GetPropertyValue(@PORTALID,@USERID,'Country'), 
        @POSTALCODE = dbo.GetPropertyValue(@PORTALID,@USERID,'Postalcode'), 
        @TELEPHONE = dbo.STRFILTER(dbo.GetPropertyValue(@PORTALID,@USERID,'Telephone'),'0,1,2,3,4,5,6,7,8,9'), 
        @CELL = dbo.STRFILTER(dbo.GetPropertyValue(@PORTALID,@USERID,'Cell'),'0,1,2,3,4,5,6,7,8,9'), 
        @EMAILPERMISSION = dbo.GetPropertyValue(@PORTALID,@USERID,'eNewsLetter'), 
        @TEXTPERMISSION = dbo.GetPropertyValue(@PORTALID,@USERID,'TextPermission') 
    FROM Users 
    WHERE UserId = @USERID 


        -- Insert new user
        IF @Action = 'ADD'
            BEGIN

                INSERT INTO UserPass
                  (UserID, Portalid, CreatedDate, Username, UserPass.Password, email, firstname, lastname, gender, birthdate, UserPass.address, city, UserPass.state, country, postalcode, telephone, cell, emailpermission, textpermission, UpdateDirection)
                VALUES 
                  (@UserID, @PORTALID, @CREATEDDATE, @Username, @Password, @EMAIL, @FIRSTNAME, @LASTNAME,@GENDER, @BIRTHDATE, @ADDRESS, @CITY, @STATE, @COUNTRY, @POSTALCODE, @TELEPHONE, @CELL, @EMAILPERMISSION, @TEXTPERMISSION, 'OUT')

    END

@PORTALID和@USERID作为参数传递给存储过程,这些值实际上保存在insert中。没有更新的列是为该值调用GetPropertyValue函数的列。这只在一个数据库服务器上(我不是通过Management studio连接到开发数据库,而是直接连接到生产数据库)。当我从Management Studio执行存储过程时,它是完美的。当表上的触发器调用存储过程时,GetPropertyValue函数将失败。

EN

Stack Overflow用户

发布于 2010-08-31 06:19:38

对我来说,这说明您的应用程序代码中有一些有趣的地方。我将检查您的C#逻辑,并确保您在命令对象上使用正确的函数调用。它可能会帮助你发布你的代码。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3604638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档