我有一個存儲過程,當我從SQL Server Management Studio執行存儲過程時能夠正常工作。不幸的是,它在生產服務器上的表現並不一樣。在插入語句中,它只插入一些值,其餘爲NULL。 NULL值來自用戶定義的標量函數調用(從Management Studio執行時也可以正常工作)。有沒有人遇到類似的事情?我認爲這可能是一個權限問題,但我通過Management Studio使用生產連接證書連接到數據庫,並看到相同的行爲。我是一個通常與ORM一起工作的C#開發人員,所以我絕對不是SQL專家。在此先感謝,夥計們。存儲過程從管理工作室正確執行,但沒有在生產
下面是代碼:
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被傳遞給存儲過程作爲參數,這些值是在所述插入件實際上節省。未更新的列是爲該值調用GetPropertyValue函數的列。這隻在一個數據庫服務器上(我沒有通過Management Studio連接到開發數據庫,我直接連接到生產數據庫)。當我從Management Studio執行存儲過程時,它是完美的。當表上的觸發器調用存儲過程時,GetPropertyValue函數失敗。
如果有權限錯誤,你會知道的。我的猜測是這些函數是建立在支持不存在的子引用上的 - 這就是爲什麼你會因爲它們而得到NULL的原因......你需要發佈存儲過程代碼,並且至少有一個函數使用... – 2010-08-30 22:18:54