下面是一个存储过程:
目的是如果传递三个参数,第一个是表明,第二个是id,第三个是name。
如果表中还没有name字段与@name相同的,那么插入一条新数据。
CREATE PROCEDURE [dbo].[TESTXX]
(
@tb char(4),
@id int,
@nm nvarchar(10)
)
AS
DECLARE @temp int;
DECLARE @sql nvarchar(1000);
DECLARE @id2 varchar(10);
DECLARE @nm2 nvarchar(10);
set @id2 = @id
set @nm2 = @nm
set @sql = '
BEGIN
SELECT '+@temp+' = id WHERE name='''+@nm2+''';
IF('+@temp+' IS NULL)
BEGIN
INSERT INTO '+@tb+'(id,name) VALUES('+@id2+', '''+@tb+''');
END
END'
EXEC(@sql)
我有两个问题:
1.DECLARE @temp int;这个时候执行到SELECT '+@temp+' = id WHERE name='''+@nm2+''';直接说nvarchar转化为int的时候失败,只能把DECLARE @temp int改为DECLARE @temp nvachar(10)2.貌似执行到IF之前就结束了,不在执行,也没有错误,这是为什么3.IF('+@temp+' IS NULL)这个貌似也有问题小弟第一次用存储过程,这个问题搞了2天了,额,求助各位大侠
目的是如果传递三个参数,第一个是表明,第二个是id,第三个是name。
如果表中还没有name字段与@name相同的,那么插入一条新数据。
CREATE PROCEDURE [dbo].[TESTXX]
(
@tb char(4),
@id int,
@nm nvarchar(10)
)
AS
DECLARE @temp int;
DECLARE @sql nvarchar(1000);
DECLARE @id2 varchar(10);
DECLARE @nm2 nvarchar(10);
set @id2 = @id
set @nm2 = @nm
set @sql = '
BEGIN
SELECT '+@temp+' = id WHERE name='''+@nm2+''';
IF('+@temp+' IS NULL)
BEGIN
INSERT INTO '+@tb+'(id,name) VALUES('+@id2+', '''+@tb+''');
END
END'
EXEC(@sql)
我有两个问题:
1.DECLARE @temp int;这个时候执行到SELECT '+@temp+' = id WHERE name='''+@nm2+''';直接说nvarchar转化为int的时候失败,只能把DECLARE @temp int改为DECLARE @temp nvachar(10)2.貌似执行到IF之前就结束了,不在执行,也没有错误,这是为什么3.IF('+@temp+' IS NULL)这个貌似也有问题小弟第一次用存储过程,这个问题搞了2天了,额,求助各位大侠
有一个表有两个字段(id int, name varchar(10))
这个存储过程有三个参数:参数1:表名 参数2:要插入的id 参数3:要插入的name
需要的效果是,如果表中没有某一项的name字段和参数3相同,那么使用参数2,3插入一条新数据。
CREATE PROCEDURE [dbo].[TESTXX]
(
@tb char(4),
@id int,
@nm nvarchar(10)
)
AS
DECLARE @temp int;
DECLARE @sql nvarchar(1000);
DECLARE @id2 varchar(10);
DECLARE @nm2 nvarchar(10);
set @id2 = @id
set @nm2 = @nm
set @sql = '
BEGIN
SELECT '+@temp+' = id FROM '+@tb+' WHERE name='''+@nm2+''';
IF('+@temp+' IS NULL)
BEGIN
INSERT INTO '+@tb+'(id,name) VALUES('+@id2+', '''+@nm2+''');
END
END'
EXEC(@sql)我有3个问题:
1.DECLARE @temp int;这个时候执行到SELECT '+@temp+' = id FROM '+@tb+' WHERE name='''+@nm2+'''直接说SELECT ' 转换成数据类型 int 时失败,只能把DECLARE @temp int改为DECLARE @temp nvachar(10)2.貌似执行到IF之前就结束了,不在执行,也没有错误,这是为什么3.IF('+@temp+' IS NULL)这个貌似也有问题小弟第一次用存储过程,这个问题搞了2天了,额,求助各位大侠
2、由于转换失败,后面的都不执行
有点不明白,因为@temp本来就是int的,你说的cast(@temp as varchar(10))或convert(varchar(10),@temp)不是转化为varchar了吗SELECT '+@temp+' = id FROM '+@tb+' WHERE name='''+@nm2+''';怎么改,能给点建议吗?