只有随机id的第一个字符插入到sql表中

时间:2016-09-19 13:36:22

标签: sql-server sql-server-2008 relational-database sql-function database-trigger

我正在批量插入表格。我有多个触发器从批量插入到不同的表插入几列。我生成长度为25的字母数字字符作为id。我创建了一个函数来执行此操作,调用此函数,我需要@ID列的值。但我只得到插入随机字符串字符的第一个数字。

触发我调用我的功能的地方

 IF NOT EXISTS(SELECT * FROM CHEMICAL WHERE Chemical_Name = @Chemical_Name)
    BEGIN
        INSERT INTO CHEMICAL(Chemical_ID, Chemical_Name, CAS_Number,EHS,TPQ_Pounds,RQ_Pounds,last_updated)
        VALUES(dbo.SDS_GENERATE_ID(), @Chemical_Name,@CAS_Number, @EHS,@TPQ_Pounds,@RQ_Pounds,getdate())
    END 

功能SDS_GENERATE_ID

CREATE FUNCTION SDS_GENERATE_ID()
RETURNS VARCHAR
AS
BEGIN

DECLARE @r varchar(25)
SELECT @r = coalesce(@r, '') + n
FROM (SELECT top 25 
CHAR(number) n FROM
master..spt_values
WHERE type = 'P' AND 
(number between ascii(0) and ascii(9)
or number between ascii('A') and ascii('Z')
or number between ascii('a') and ascii('z'))
ORDER BY (select * from MyRAND)) a
return @r
   END;
   GO

MyRand VIEW因为我无法在udfs中使用NEWID()

CREATE VIEW [dbo].[MyRAND]
AS
select newid() as randID
GO

The Chemical_ID column suppose to have 25 char long id

任何帮助都表示赞赏,并提前致谢。

2 个答案:

答案 0 :(得分:1)

CREATE FUNCTION SDS_GENERATE_ID()
RETURNS VARCHAR

您需要指定长度,否则您将最终收到单个Char

您当前形式的函数仅返回低于值..

0

通过指定长度进行修改时返回

CREATE FUNCTION SDS_GENERATE_ID()
RETURNS VARCHAR(25)

给出

01234656789..

答案 1 :(得分:0)

您在函数返回类型中没有指定的字符长度

alter FUNCTION SDS_GENERATE_ID()
RETURNS VARCHAR(20)
AS
BEGIN

DECLARE @r varchar(25)
SELECT @r = coalesce(@r, '') + n
FROM (SELECT top 25 
CHAR(number) n FROM
master..spt_values
WHERE type = 'P' AND 
(number between ascii(0) and ascii(9)
or number between ascii('A') and ascii('Z')
or number between ascii('a') and ascii('z'))
ORDER BY (select id from employee)) a
return @r
   END;
   GO

注意:在上面的返回类型中替换所需的长度