,但是我要统计 TaskTabelName 里面的数据
我是打算这样在存储过程里这样写的: select *,(select * from Task.TaskTabelName) from Task
但是 老报一个少个括号
求大神指教一下,我是菜鸟
8 个解决方案
#1
表名不能这样弄,用游标也不太对。。求大神
#2
TaskTabelName你的这个是一个列还是一个表?如果是一个列那你这个连第一范式都不满足的。就要修改表结构。而不是去考虑怎么用。
最好给出表结构和几条数据,不然瞎猜于事无补
最好给出表结构和几条数据,不然瞎猜于事无补
#3
我表达的不清楚?
表Task
TaskID, TaskSendToGroups TaskSendDateTime, TaskTableName, TaskLinkeTable
1 1 2012-06-24 07:00 EDM_Dynamic_1 EDM_Links_1
2 1,2 2012-06-24 07:00 EDM_Dynamic_2 EDM_Links_2
其中EDM_Dynamic1、EDM_Dynamic2动态创建的表
我要查询出Task表中的数据,并且要统计出 EDM_Dynamic_1,和EDM_Dynamic_2表中的数据
#4
子查寻语法有问题吧,tasktablename是列,那* 是什么。
没见过这样写的。
没见过这样写的。
#5
你这是列里面存的表名字,想逐行检索select只能动态拼接sql去执行,用游标和表变量都可以。
类似于
用游标或表变脸循环执行上面的语句就好了
类似于
select @tablename = TaskTableName FROM task WHERE ...
EXEC ('SELECT * FROM ' + @tablename)
用游标或表变脸循环执行上面的语句就好了
#6
TaskID, TaskSendToGroups TaskSendDateTime, TaskTableName, TaskLinkeTable
1 1 2012-06-24 07:00 EDM_Dynamic_1 EDM_Links_1
2 1,2 2012-06-24 07:00 EDM_Dynamic_2 EDM_Links_2
好像都没太理解我的意思。 我的意思是 在我查询Task表分页的时候,统计出表EDM_Dynamic_1、EDM_Dynamic_2中的数据,作为Task表的一列显示出来
::
大概是这么意思, 我要的是一步到位,
select *,(select count(*) from Task.TaskTableName)as Num from Task
---------------------下面是我的存储过程---------------
USE [TopenEDM]
GO
/****** Object: StoredProcedure [dbo].[EDM_TasksList] Script Date: 06/24/2012 09:21:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[EDM_TasksList]
--TaskID, TaskChannels, Task_ReplyTo, TaskSendToGroups, TaskExclusionsGroups, Task_EMID, TaskSendDateTime, TaskTableName, TaskState, Task_CreateUID, TaskCreateDate
@PageSize INT,
@PageIndex INT,
@RecordCount INT OUTPUT
AS
BEGIN
-- BEGIN TRAN
DECLARE @Sql NVARCHAR(MAX), @Where NVARCHAR(MAX),@taskTableName nvarchar(50),@count int,@tabsql nvarchar(max)
,@num int
--默认值 @SQL 语句取得总行数
SET @Sql = 'SELECT @RecordCount = COUNT(1) FROM EDM_Tasks '
set @Where=''
IF(@Where != '') SET @Where = ' WHERE ' + @Where
--合并 @SQL 查询行数
SET @Sql = @Sql + @Where
--合并 @SQL 查询
SET @Sql = 'SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY TaskID DESC) AS RowNumber, EDM_Tasks.*,dbo.EDM_FN_GetGroupsNameByIDs(EDM_Tasks.TaskSendToGroups,null,null) AS SendGroupsName,dbo.EDM_FN_GetGroupsNameByIDs(EDM_Tasks.TaskExclusionsGroups,null,null) AS ExclusionsGroupsName,dbo.EDM_GetEmailIDByName(EDM_Tasks.Task_EMID) as TaskEmailName FROM EDM_Tasks ' + @Where + ') as tmp
WHERE RowNumber BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex * @PageSize'
EXEC sp_executesql @Sql,
N'@PageSize INT,
@PageIndex INT',
@PageSize,
@PageIndex
END
#7
既然你都用存储过程了,那就用游标吧
没有数据调试,你自己调吧,不知道你要的是不是这样的效果
declare @tablename nvarchar(100)
--创建临时表
select *,[count] into #emd_tasks from EDM_Tasks
declare @cursor cursor
set @cursor=cursor for select name from EDM_Tasks
open @cursor
fetch next from @cursor into @tablename
while(@@fetch_status=0)begin
begin
--print 'update #emd_tasks set [count] = (select count(1) from '+ @tablename+') where TaskTableName = '''+@tablename+''''
exec('update #emd_tasks set [count] = (select count(1) from '+ @tablename+') where TaskTableName = '''+@tablename+'''')
fetch next from @cursor into @tablename
end
close @cursor
deallocate @cursor
select * from #emd_tasks
没有数据调试,你自己调吧,不知道你要的是不是这样的效果
#8
晕,帖子怎么不能再编辑的。第二行可能要该下
select *,0 as [count] into #emd_tasks from EDM_Tasks
select *,0 as [count] into #emd_tasks from EDM_Tasks
#1
表名不能这样弄,用游标也不太对。。求大神
#2
TaskTabelName你的这个是一个列还是一个表?如果是一个列那你这个连第一范式都不满足的。就要修改表结构。而不是去考虑怎么用。
最好给出表结构和几条数据,不然瞎猜于事无补
最好给出表结构和几条数据,不然瞎猜于事无补
#3
我表达的不清楚?
表Task
TaskID, TaskSendToGroups TaskSendDateTime, TaskTableName, TaskLinkeTable
1 1 2012-06-24 07:00 EDM_Dynamic_1 EDM_Links_1
2 1,2 2012-06-24 07:00 EDM_Dynamic_2 EDM_Links_2
其中EDM_Dynamic1、EDM_Dynamic2动态创建的表
我要查询出Task表中的数据,并且要统计出 EDM_Dynamic_1,和EDM_Dynamic_2表中的数据
#4
子查寻语法有问题吧,tasktablename是列,那* 是什么。
没见过这样写的。
没见过这样写的。
#5
你这是列里面存的表名字,想逐行检索select只能动态拼接sql去执行,用游标和表变量都可以。
类似于
用游标或表变脸循环执行上面的语句就好了
类似于
select @tablename = TaskTableName FROM task WHERE ...
EXEC ('SELECT * FROM ' + @tablename)
用游标或表变脸循环执行上面的语句就好了
#6
TaskID, TaskSendToGroups TaskSendDateTime, TaskTableName, TaskLinkeTable
1 1 2012-06-24 07:00 EDM_Dynamic_1 EDM_Links_1
2 1,2 2012-06-24 07:00 EDM_Dynamic_2 EDM_Links_2
好像都没太理解我的意思。 我的意思是 在我查询Task表分页的时候,统计出表EDM_Dynamic_1、EDM_Dynamic_2中的数据,作为Task表的一列显示出来
::
大概是这么意思, 我要的是一步到位,
select *,(select count(*) from Task.TaskTableName)as Num from Task
---------------------下面是我的存储过程---------------
USE [TopenEDM]
GO
/****** Object: StoredProcedure [dbo].[EDM_TasksList] Script Date: 06/24/2012 09:21:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[EDM_TasksList]
--TaskID, TaskChannels, Task_ReplyTo, TaskSendToGroups, TaskExclusionsGroups, Task_EMID, TaskSendDateTime, TaskTableName, TaskState, Task_CreateUID, TaskCreateDate
@PageSize INT,
@PageIndex INT,
@RecordCount INT OUTPUT
AS
BEGIN
-- BEGIN TRAN
DECLARE @Sql NVARCHAR(MAX), @Where NVARCHAR(MAX),@taskTableName nvarchar(50),@count int,@tabsql nvarchar(max)
,@num int
--默认值 @SQL 语句取得总行数
SET @Sql = 'SELECT @RecordCount = COUNT(1) FROM EDM_Tasks '
set @Where=''
IF(@Where != '') SET @Where = ' WHERE ' + @Where
--合并 @SQL 查询行数
SET @Sql = @Sql + @Where
--合并 @SQL 查询
SET @Sql = 'SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY TaskID DESC) AS RowNumber, EDM_Tasks.*,dbo.EDM_FN_GetGroupsNameByIDs(EDM_Tasks.TaskSendToGroups,null,null) AS SendGroupsName,dbo.EDM_FN_GetGroupsNameByIDs(EDM_Tasks.TaskExclusionsGroups,null,null) AS ExclusionsGroupsName,dbo.EDM_GetEmailIDByName(EDM_Tasks.Task_EMID) as TaskEmailName FROM EDM_Tasks ' + @Where + ') as tmp
WHERE RowNumber BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex * @PageSize'
EXEC sp_executesql @Sql,
N'@PageSize INT,
@PageIndex INT',
@PageSize,
@PageIndex
END
#7
既然你都用存储过程了,那就用游标吧
没有数据调试,你自己调吧,不知道你要的是不是这样的效果
declare @tablename nvarchar(100)
--创建临时表
select *,[count] into #emd_tasks from EDM_Tasks
declare @cursor cursor
set @cursor=cursor for select name from EDM_Tasks
open @cursor
fetch next from @cursor into @tablename
while(@@fetch_status=0)begin
begin
--print 'update #emd_tasks set [count] = (select count(1) from '+ @tablename+') where TaskTableName = '''+@tablename+''''
exec('update #emd_tasks set [count] = (select count(1) from '+ @tablename+') where TaskTableName = '''+@tablename+'''')
fetch next from @cursor into @tablename
end
close @cursor
deallocate @cursor
select * from #emd_tasks
没有数据调试,你自己调吧,不知道你要的是不是这样的效果
#8
晕,帖子怎么不能再编辑的。第二行可能要该下
select *,0 as [count] into #emd_tasks from EDM_Tasks
select *,0 as [count] into #emd_tasks from EDM_Tasks