我有一個向表中插入數據的過程。我聲明瞭要作爲Varchar類型插入到表(輸入參數)的值。但表中2列的列類型已更改爲Int類型。但是程序仍然正確地插入值(IssuerId和Employer Id列在底層表IssuerGroupIDMapping中是int類型)。 對於我來說重要的問題是在某些特定情況下程序會失敗,我已經檢查了C#,以便只有有效的整數傳遞給proc。 我是否需要立即更改代碼(對於我來說,由於程序已經在生產中,並且似乎正在工作中)。請建議。SQL Server中從字符串到int的隱式數據轉換
下面是我的程序代碼:
CREATE PROCEDURE [uspInsertIssuerGroupIDMapping]
@EmployerID Varchar(25),
@IssuerID Varchar(25),
@PlanID Varchar(25),
@IssuerGroupID Varchar(25),
@CreateUserID Varchar(25)
*****/
AS
BEGIN TRY
SET NOCOUNT ON
SET XACT_ABORT ON
--check to see if a duplicate trigger exists
IF (NOT EXISTS (SELECT 1 FROM [IssuerGroupIDMapping]
WHERE EmployerId = @EmployerID AND PlanId = @PlanID)
)
BEGIN
INSERT INTO [IssuerGroupIDMapping]
([EmployerId]
,[IssuerId]
,[PlanId]
,[IssuerGroupID]
,[CreateUserId]
,[CreateDate]
,[UpdateUserId]
,[UpdateDate]
)
VALUES
(
@EmployerID
,@IssuerID
,@PlanID
,@IssuerGroupID
,@CreateUserId
,(SELECT Framework.udfGetTimeTravelDate())
,@CreateUserId
,(SELECT Framework.udfGetTimeTravelDate())
);
SELECT @@ROWCOUNT;
END
ELSE
BEGIN
--if a duplicate record exists update it
UPDATE [IssuerGroupIDMapping] SET
IssuerId = @IssuerID
,IssuerGroupID = @IssuerGroupID
,UpdateDate = (SELECT Framework.udfGetTimeTravelDate())
,UpdateUserId = @CreateUserID
WHERE EmployerId = @EmployerID
AND PlanId = @PlanID
SELECT @@ROWCOUNT;
END
確保你傳遞一個*號* -2147483648之間*和* 2147483647這些參數。其他任何東西都會崩潰。 – Kaf
我無法想象在SP參數聲明中將「varchar(x)」替換爲「int」效率更高的場景。這是非常低的風險,如果我在你描述的情況下通過一個genuuine varchar,我肯定會希望SP引發一個錯誤。在插入TRY/CATCH並處理任何轉換錯誤之前,您甚至可以在SP中明確地將varchar參數強制轉換爲int。 –
您可能還想了解MERGE語句 – podiluska