@str_Condition varchar(20)
AS
BEGIN
SET NOCOUNT ON;
select count(*) from t1 where @str_Condition = 'aaa')
END
我想在上面红字处,即where后面的列名处加个变量,那第一个红字处该用什么变量类型来定义呢?
引用的时候该如何引用呢?
谢谢了
22 个解决方案
#1
CREATE PROCEDURE [dbo].[P_searchNum]
@str_Condition varchar(20)
AS
BEGIN
exec('select count(*) from t1 where '+@str_Condition+' = ''aaa''')
END
#2
谢谢,虚心请教下,begin后面要用exec呢?
#3
我试后为什么会出现这个错误呢?
关键字 'exec' 附近有语法错误。
关键字 'exec' 附近有语法错误。
#4
哦 再看看啊
#5
create table t1(name varchar(50))
insert into t1 select 'bbb'
insert into t1 select 'aaa'
insert into t1 select 'aaa'
insert into t1 select 'aaa'
CREATE PROCEDURE [dbo].[P_searchNum]
@str_Condition varchar(20)
AS
BEGIN
exec('select count(*) from t1 where '+@str_Condition+' = ''aaa''')
END
exec [dbo].[P_searchNum] 'name'
3
没问题吧!
#6
ALTER PROCEDURE [dbo].[P_searchNum]
@str_search varchar(20),
@str_Condition varchar(20),
@num int output
AS
BEGIN
SET NOCOUNT ON;
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+@str_search+ '%')
drop table #rownum
return @num
END
去掉exec后存储过程可以运行,但是运行后出现这个错误,麻烦高手给看看,万分感谢了.
declare @test int
exec P_searchNum '2','a',@test output
select @test
上面代码的出错内容如下:
在将 varchar 值 'select top 1 id from #rownum where a like 2%' 转换成数据类型 int 时失败。
#7
怎么不直接问这个啊...汗
#8
不好意思,我本来以为问多了,反而会乱...
麻烦高手了,扣谢了。
麻烦高手了,扣谢了。
#9
呵呵,表重要字段帖一下吧,免的你改完有不对
#10
键临时表有什么用哦?没排序的,top 1会乱的,因为top1你都不知道哪条
#11
谢谢,
tb_Car表的全部字段有以下内容:
CarID, varchar(20), not null,
CarName, varchar(20), not null,
PilotName, varchar(20),
VehicleType, varchar(20),
另外:
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+@str_search+ '%')
这两句是取出记录select对应记录在当前td_car表的相应行,
我的目前就是取出对应数据在td_car的表的对应行,返回行号到@num就可以了。
麻烦大哥了,万分感谢了。
tb_Car表的全部字段有以下内容:
CarID, varchar(20), not null,
CarName, varchar(20), not null,
PilotName, varchar(20),
VehicleType, varchar(20),
另外:
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+@str_search+ '%')
这两句是取出记录select对应记录在当前td_car表的相应行,
我的目前就是取出对应数据在td_car的表的对应行,返回行号到@num就可以了。
麻烦大哥了,万分感谢了。
#12
去掉where后面的变量后,只带一个变量和回参该过程可以正常运行,且返回值正常
ALTER PROCEDURE [dbo].[P_searchNum]
@str_search varchar(20),
@num int output
AS
BEGIN
SET NOCOUNT ON;
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = (select top 1 id from #rownum where CarID like @str_search + '%')
drop table #rownum
return @num
END
#13
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+convert(nvarchar(10),@str_search)+ '%')
这样,
PS:
动态SQL里面不能应用局部临时表....
所以,你上面的写法有问题。
#14
行,按你的写吧,等一会啊
#15
create table #(id int)
insert into # select 1
insert into # select 2
insert into # select 3
exec('select * from #')
呵呵,花和尚...
#16
你这个id是临时新增的,取出来也没有实际意义啊,
没有排序,
没有排序,
#17
谢谢,hery2002 兄弟..
我按照您那样的把set @num整行给改掉后,还是有运行错误,
错误信息如下:
在将 nvarchar 值 'select top 1 id from #rownum where CarID like 2%' 转换成数据类型 int 时失败。
麻烦大哥帮看下,多谢了。
我按照您那样的把set @num整行给改掉后,还是有运行错误,
错误信息如下:
在将 nvarchar 值 'select top 1 id from #rownum where CarID like 2%' 转换成数据类型 int 时失败。
麻烦大哥帮看下,多谢了。
#18
o,和表变量搞混淆了.....
#19
create table tb_Car(
CarID varchar(20) not null,
CarName varchar(20) not null,
PilotName varchar(20),
VehicleType varchar(20))
insert into tb_car select '1','abc','ba','ca'
insert into tb_car select '2','cc','dd','ee'
insert into tb_car select '3','ff','gg','hh'
ALTER PROCEDURE [dbo].[P_searchNum]
@str_search varchar(20),
@str_Condition varchar(20),
@num int output
AS
BEGIN
SET NOCOUNT ON;
select id=identity(int,1,1),* into #rownum from tb_Car
declare @sql nvarchar(4000)
set @sql = 'select top 1 @id=id from #rownum where '+@str_Condition+' like '''+@str_search+ '%'''
exec sp_executesql @sql,N'@id int output',@num output
drop table #rownum
END
declare @test int
exec P_searchNum 'c','CarName',@test output
select @test
2
#20
晕菜...
根本不能这样写,
@num 为int
后面一长串为varchar类型,
肯定不能用set..
估计要用 sp_excutesql 作为output参数传出来.
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+convert(nvarchar(10),@str_search)+ '%')
根本不能这样写,
@num 为int
后面一长串为varchar类型,
肯定不能用set..
估计要用 sp_excutesql 作为output参数传出来.
#21
楼上是印刷机呀~~~这么快....
测试ok.太感谢您了。hand~~~
结贴
测试ok.太感谢您了。hand~~~
结贴
#22
.....
#1
CREATE PROCEDURE [dbo].[P_searchNum]
@str_Condition varchar(20)
AS
BEGIN
exec('select count(*) from t1 where '+@str_Condition+' = ''aaa''')
END
#2
谢谢,虚心请教下,begin后面要用exec呢?
#3
我试后为什么会出现这个错误呢?
关键字 'exec' 附近有语法错误。
关键字 'exec' 附近有语法错误。
#4
哦 再看看啊
#5
create table t1(name varchar(50))
insert into t1 select 'bbb'
insert into t1 select 'aaa'
insert into t1 select 'aaa'
insert into t1 select 'aaa'
CREATE PROCEDURE [dbo].[P_searchNum]
@str_Condition varchar(20)
AS
BEGIN
exec('select count(*) from t1 where '+@str_Condition+' = ''aaa''')
END
exec [dbo].[P_searchNum] 'name'
3
没问题吧!
#6
ALTER PROCEDURE [dbo].[P_searchNum]
@str_search varchar(20),
@str_Condition varchar(20),
@num int output
AS
BEGIN
SET NOCOUNT ON;
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+@str_search+ '%')
drop table #rownum
return @num
END
去掉exec后存储过程可以运行,但是运行后出现这个错误,麻烦高手给看看,万分感谢了.
declare @test int
exec P_searchNum '2','a',@test output
select @test
上面代码的出错内容如下:
在将 varchar 值 'select top 1 id from #rownum where a like 2%' 转换成数据类型 int 时失败。
#7
怎么不直接问这个啊...汗
#8
不好意思,我本来以为问多了,反而会乱...
麻烦高手了,扣谢了。
麻烦高手了,扣谢了。
#9
呵呵,表重要字段帖一下吧,免的你改完有不对
#10
键临时表有什么用哦?没排序的,top 1会乱的,因为top1你都不知道哪条
#11
谢谢,
tb_Car表的全部字段有以下内容:
CarID, varchar(20), not null,
CarName, varchar(20), not null,
PilotName, varchar(20),
VehicleType, varchar(20),
另外:
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+@str_search+ '%')
这两句是取出记录select对应记录在当前td_car表的相应行,
我的目前就是取出对应数据在td_car的表的对应行,返回行号到@num就可以了。
麻烦大哥了,万分感谢了。
tb_Car表的全部字段有以下内容:
CarID, varchar(20), not null,
CarName, varchar(20), not null,
PilotName, varchar(20),
VehicleType, varchar(20),
另外:
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+@str_search+ '%')
这两句是取出记录select对应记录在当前td_car表的相应行,
我的目前就是取出对应数据在td_car的表的对应行,返回行号到@num就可以了。
麻烦大哥了,万分感谢了。
#12
去掉where后面的变量后,只带一个变量和回参该过程可以正常运行,且返回值正常
ALTER PROCEDURE [dbo].[P_searchNum]
@str_search varchar(20),
@num int output
AS
BEGIN
SET NOCOUNT ON;
select id=identity(int,1,1),* into #rownum from tb_Car
set @num = (select top 1 id from #rownum where CarID like @str_search + '%')
drop table #rownum
return @num
END
#13
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+convert(nvarchar(10),@str_search)+ '%')
这样,
PS:
动态SQL里面不能应用局部临时表....
所以,你上面的写法有问题。
#14
行,按你的写吧,等一会啊
#15
create table #(id int)
insert into # select 1
insert into # select 2
insert into # select 3
exec('select * from #')
呵呵,花和尚...
#16
你这个id是临时新增的,取出来也没有实际意义啊,
没有排序,
没有排序,
#17
谢谢,hery2002 兄弟..
我按照您那样的把set @num整行给改掉后,还是有运行错误,
错误信息如下:
在将 nvarchar 值 'select top 1 id from #rownum where CarID like 2%' 转换成数据类型 int 时失败。
麻烦大哥帮看下,多谢了。
我按照您那样的把set @num整行给改掉后,还是有运行错误,
错误信息如下:
在将 nvarchar 值 'select top 1 id from #rownum where CarID like 2%' 转换成数据类型 int 时失败。
麻烦大哥帮看下,多谢了。
#18
o,和表变量搞混淆了.....
#19
create table tb_Car(
CarID varchar(20) not null,
CarName varchar(20) not null,
PilotName varchar(20),
VehicleType varchar(20))
insert into tb_car select '1','abc','ba','ca'
insert into tb_car select '2','cc','dd','ee'
insert into tb_car select '3','ff','gg','hh'
ALTER PROCEDURE [dbo].[P_searchNum]
@str_search varchar(20),
@str_Condition varchar(20),
@num int output
AS
BEGIN
SET NOCOUNT ON;
select id=identity(int,1,1),* into #rownum from tb_Car
declare @sql nvarchar(4000)
set @sql = 'select top 1 @id=id from #rownum where '+@str_Condition+' like '''+@str_search+ '%'''
exec sp_executesql @sql,N'@id int output',@num output
drop table #rownum
END
declare @test int
exec P_searchNum 'c','CarName',@test output
select @test
2
#20
晕菜...
根本不能这样写,
@num 为int
后面一长串为varchar类型,
肯定不能用set..
估计要用 sp_excutesql 作为output参数传出来.
set @num = ('select top 1 id from #rownum where '+@str_Condition+' like '+convert(nvarchar(10),@str_search)+ '%')
根本不能这样写,
@num 为int
后面一长串为varchar类型,
肯定不能用set..
估计要用 sp_excutesql 作为output参数传出来.
#21
楼上是印刷机呀~~~这么快....
测试ok.太感谢您了。hand~~~
结贴
测试ok.太感谢您了。hand~~~
结贴
#22
.....