0

我使用 NORTHWIND 数据库,我必须使用将新值插入 dbo.Customers 的过程。

IF OBJECT_ID('dbo.usp_InsertCustomer') IS NOT NULL
    DROP PROC dbo.usp_InsertCustomer;
GO
CREATE PROC dbo.usp_InsertCustomer
    @CompanyName AS nvarchar(40), 
    @ContactName AS nvarchar(30) = NULL,
    @ContactTitle AS nvarchar(30) = NULL,
    @Address AS nvarchar(60) = NULL,
    @City AS nvarchar(15) = NULL,
    @Region AS nvarchar(15) = NULL,
    @PostalCode AS nvarchar(10) = NULL,
    @Country AS nvarchar(15) = NULL,
    @Phone AS nvarchar(24) = NULL,
    @Fax AS nvarchar(24) = NULL
AS
BEGIN
    INSERT INTO dbo.Customers(CustomerID, CompanyName, ContactName, ContactTitle,
        Address, City, Region, PostalCode, Country, Phone, Fax)
    VALUES (NEWID(), @CompanyName, @ContactName, @ContactTitle, @Address, @City,
         @Region, @PostalCode, @Country, @Phone, @Fax);
END
GO

当我尝试使用这个程序时

EXEC dbo.usp_InsertCustomer @CompanyName = N'MyCompany'

我明白了

Arithmetic overflow error converting expression to data type nvarchar.
4

2 回答 2

1

假设您拥有 Internet 上的 Northwind DB,CustomerID 的预期值为 nchar(5),NEWID() 将返回一个唯一标识符。尝试更改此设置,以便您可以将正确的值插入到 CustomerID。

编辑:

这是生成自动 ID 的一种非常糟糕的方法,但是对于您的情况,您可以执行以下操作:

(SELECT MAX(CONVERT(INT, ISNULL(CustomerID, '0'))) + 1 FROM dbo.Customers)

这是假设所有 CustomerIDs 值在表上都是整数。

最好的方法是 Sean Lange 在评论中提到的:将 IDENTITY 属性添加到 CustomerID 列(为此,您需要将数据类型更改为 INT),并让 SQL SERVER 处理自动增量。

于 2014-12-22T22:04:07.487 回答
0
DECLARE @CustomerID uniqueidentifier
SET @CustomerID = NEWID()
SELECT SUBSTRING(CAST(@CustomerID AS NVARCHAR(36)),0,5)

这有帮助。

于 2014-12-22T22:35:42.583 回答