ALTER PROCEDURE [dbo].[Get_Month]
@city varchar(5000) --地市
AS
BEGIN
SET NOCOUNT ON;
declare abc cursor for SELECT * FROM tab where city in(@city)
谁知这个地市用IN应如何往里传参,我这样传:SP_Get_Month_116_T '北京,上海'不对呢,查不出数据这样可以查出来:select * from tab where city in('北京','上海')迷或了,这个参数要咋传进去呢?
@city varchar(5000) --地市
AS
BEGIN
SET NOCOUNT ON;
declare abc cursor for SELECT * FROM tab where city in(@city)
谁知这个地市用IN应如何往里传参,我这样传:SP_Get_Month_116_T '北京,上海'不对呢,查不出数据这样可以查出来:select * from tab where city in('北京','上海')迷或了,这个参数要咋传进去呢?
解决方案 »
- 如何限制表中记录的条数
- 如何使用sql语句插入主键列数据
- 如何让一个帐号只有create/modify 视图的权限?而不能有其他如create table, create database,.....的权限.
- 使用TransactionScope访问2005数据库MSDTC错误
- 数据库比较及删除表的问题
- 请问高手 SQL语句该怎么写。
- 求助:sql server text字段,频繁查询、修改、删除操作会导致数据库越来越慢,如何优化
- 求一个修改表字段名称的SQL语句!
- 有没有办法限制某个账户在某段时间内没有访问数据库的权限
- openrowset将数据导出到excel表中
- 【100分】求教 SQL语句
- 数据库已知其中一列的值怎么查出该列的id
declare @sql nvarchar(max)
set @sql='SELECT * FROM tab where city in('+@city+')'
exec(@sql)如果你用游标的话,可以先创建一个表变量,然后insert into @temp exec(@sql)
把数据存储在表变量中然后用于游标查询
@city varchar(5000) --地市
AS
BEGIN
SET NOCOUNT ON;
declare abc cursor for
SELECT * FROM tab where (','+RTRIM(city)+',',','+@city+',')>0
set @sql= 'declare abc cursor for SELECT * FROM tab where city in('+@city+')'
exec(@sql)
无法在向表插入变量时将 EXECUTE 用作源。
我的是SQL2000,不支持这样的吧
那改成临时表呢insert into #temp exec(@sql)
exec(@sql_y)
declare abc cursor select 日期 from #tab
open abc
现在是在关键字 'select' 附近有语法错误,游标也不能用临时表吗
少了个关键字,然后我忘记告诉你了,拼接的sql里面的字符都要拼接单引号
你写的应该改成这样
set @sql_y='insert into #tab SELECT CONVERT(varchar(7), 日期, 120)as 日期 FROM tab where city in('''+replace(@city,',',''',''')+''')'
我传进来的@city 变量就是带引号的
如:in ('北京','上海','南京')
@city='北京','上海','南京'
sp_exe_name '1',''北京','上海','南京''??
sp_exe_name '1','北京,上海,南京'
ALTER Function [dbo].[GetSplitedValues](@Ids nvarchar(max))
returns @Table Table(Id nvarchar(5000))
As
BeginDeclare @ind int
Declare @Start intSet @Ids=@Ids+','
Set @Start=1Set @ind =charindex(',',@Ids)
While(@ind>0)
Begin
Declare @SubId nvarchar(100)
Set @SubId=Substring(@Ids,@Start,(@ind-1))
if(@SubId<>'' and @SubId Is Not Null)
Begin
insert into @Table(Id) values(@SubId)
End
Set @Ids =Substring(@Ids,@ind+1,Len(@Ids))
SET @ind = charindex(',',@Ids )
EndReturnEND
ALTER PROCEDURE [dbo].[Get_Month]
@city varchar(5000) --地市
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM tab where city in (select * from GetSplitedValues( @city))
set @sql_y='insert into #tab SELECT CONVERT(varchar(7), 日期, 120)as 日期 FROM tab where city in('+@city+')
exec(@sql_y)
declare abc cursor select 日期 from #tab
open abc这样执行过程后报错:对象名 '#tab' 无效。
insert into #tab
这不就是创建临时表吗,我下面有执行exec(@sql_y)
drop table #tab --若存在就删除重新创建
create table #tab
(
日期 varchar(7)
)
set @sql_y='SELECT CONVERT(varchar(7), 日期, 120)as 日期 FROM tab where city in('+@city+')'
insert into #tab
exec(@sql_y)
declare abc cursor select 日期 from #tab
open abc--这是定义表变量的语句
declare @tab table
(
日期 varchar(7)
)
set @sql_y='SELECT CONVERT(varchar(7), 日期, 120)as 日期 FROM tab where city in('+@city+')'
insert into @tab
exec(@sql_y)
declare abc cursor select 日期 from @tab
open abcinsert into是插入数据而不是创建
insert into #tab 这样也能创建临时表吧?我在最后也对这个表进行了删除 into不就是不存在自动创建吗?错了,应是select 。into #tab
用select into 好点,这样能少写不少语句,就是在最后在加一个删除临时表!谢谢你,结贴!