如何检查sql server表中没有列数据

如何检查sql server表中没有列数据,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我需要检查产品是否在表中 若不在表中,我需要为产品分配productId并插入它,所以我尝试了下面的代码…它运行成功,但并没有插入值 我的代码 create proc spr_tbl_ProductNameId_insert @productName VARCHAR(30) as DECLARE @key VARCHAR(5), @i int,@name varchar(30) SET @i = 1 SET @name = (select [Product Name] from tb

我需要检查产品是否在表中

若不在表中,我需要为产品分配productId并插入它,所以我尝试了下面的代码…它运行成功,但并没有插入值

我的代码

create proc spr_tbl_ProductNameId_insert

@productName VARCHAR(30)

as

DECLARE @key VARCHAR(5), @i int,@name varchar(30)


SET @i = 1
SET @name = (select [Product Name]  from tbl_ProductNameId where [Product Name] =@productName)

WHILE @i > 0

BEGIN

SET @key = (SELECT ABS(Checksum(NewID()) % 467) + 1000)
SET @i = (SELECT count(*) FROM tbl_ProductNameId WHERE [Product Id] = @key)

if(@name !=@productName)
insert into tbl_ProductNameId ([Product Name],[Product Id]) values (@productName,@key) 

end

在我出错的地方…谢谢

我读了你的代码,似乎你正在进行未定义的循环,因为你设置了
,而@i>0

然后将
i
值设置为唯一随机数。所以不要在循环中结束

我做了一些修改并发表了评论。请查收

create proc spr_tbl_ProductNameId_insert

@productName VARCHAR(30)

as
BEGIN  --start always with begin end keyword
    DECLARE @key VARCHAR(5), @i int,@name varchar(30)

    SET @i = 1
    SET @name = (select [Product Name]  from tbl_ProductNameId where [Product Name] =@productName)

    WHILE @i > 0

    BEGIN

        SET @key = (SELECT ABS(Checksum(NewID()) % 467) + 1000)

        --always give isnull function for default value, it good to set when result is null 
        SET @i = isnull( (SELECT count(*) FROM tbl_ProductNameId WHERE [Product Id] = @key),0) 

        if(@name !=@productName)
        insert into tbl_ProductNameId ([Product Name],[Product Id]) values (@productName,@key) 

    END

END --end always with end keyword

可以有两个同名产品吗?如果是这样,@name应替换为temp。桌子