如何在SQL Sever的SELECT语句中将表名作为参数传递

13 浏览
0 Comments

如何在SQL Sever的SELECT语句中将表名作为参数传递

表格:

------

表1

表2

表3

查询:

select count(*) 
from @tablename

我想将table1table2table3作为@tablename的参数传递给select查询,并获取每个表的计数

期望的输出:

 2 (表1计数)  3 (表2计数)  4 (表3计数)

0
0 Comments

在SQL Server中,有时候我们需要在查询语句中将表名作为参数传递。下面是一种解决方法,可以使用动态SQL查询来实现此功能。

首先,我们声明一个变量来存储动态查询的字符串。

然后,我们使用FOR XML PATH('')子句将查询结果以XML格式返回,并使用STUFF函数将其转换为字符串。

接下来,我们使用UNION ALL运算符将所有查询结果合并为一个结果集。

最后,我们使用EXEC函数来执行动态查询。

以下是示例代码:

declare @sql as varchar(max);
select @sql = stuff((
    select ' union all '
    + 'select cast(count(*) as varchar(100)) 
    + ' + char(39) + ''('' + [Col] +'' Count)'' + char(39) 
    + ' as [table_counts] '
    + ' from ' + [col]
    from [your_table_name]
    for xml path('')
  )
  , 1, 11, ''
);
exec(@sql);

你可以在这里找到一个演示示例:[Find a demo here](http://rextester.com/ZMPN80001)

0
0 Comments

如何在SQL Server中将表名作为参数传递给SELECT语句

在SQL Server中,有时候我们需要在SELECT语句中动态地传递表名作为参数。下面是一种方法来解决这个问题。

首先,我们可以使用动态SQL和游标来实现。首先我们创建一个临时表用于测试,然后使用游标遍历表中的所有表名。对于每个表名,我们可以使用动态SQL来构建一个SELECT语句,并执行它。

下面是具体的步骤:

1. 创建一个临时表用于测试:

DECLARE @tablename VARCHAR(100);
CREATE TABLE #tablenames (tablename VARCHAR(100));
INSERT INTO #tablenames
VALUES('table1'), ('table2'), ('table3');

2. 使用游标遍历临时表中的表名:

DECLARE @tablename VARCHAR(100);
DECLARE dbcursor CURSOR FOR
    SELECT tablename
    FROM #tablenames;
OPEN dbcursor;
FETCH NEXT FROM dbcursor INTO @tablename;
WHILE @@FETCH_STATUS = 0
    BEGIN
        DECLARE @sql VARCHAR(MAX);
        SET @sql = 'SELECT COUNT(*) FROM ' + @tablename;
        PRINT @sql;
        FETCH NEXT FROM dbcursor INTO @tablename;
    END;
CLOSE dbcursor;
DEALLOCATE dbcursor;

以上代码将输出以下结果:

SELECT COUNT(*) FROM table1
SELECT COUNT(*) FROM table2
SELECT COUNT(*) FROM table3

当你对结果满意后,你可以将`PRINT`语句替换为`EXEC`语句来执行动态SQL。

通过以上方法,我们可以在SELECT语句中动态地传递表名作为参数。这在某些情况下非常有用,特别是当你需要根据不同的表名来执行相同的操作时。

0
0 Comments

问题的原因是在SQL Server中,无法直接将表名作为参数传递给SELECT语句。解决方法是使用动态SQL,即构建一个字符串来包含需要执行的SELECT语句。

第一种方法是手动指定表名,代码如下:

declare @tableName varchar(30)
declare @query varchar(30)
set @tableName = 'Table1' --在这里指定表名
set @query = concat('SELECT COUNT(*) FROM ', @tableName) --在这里构建查询语句
EXEC(@query)

第二种方法允许使用表中的表名,代码如下:

declare @query varchar(8000)
set @query = ''
declare @tables table(name varchar(30))
insert into @tables values ('Table1'), ('Table2'), ('Table3')
--在这里构建查询语句
select @query = @query + ' SELECT ''' + name + ''' AS [TableName], COUNT(*) AS [Count] FROM ' + name + ' UNION ALL' from @tables
--去掉最后的"UNION ALL"
set @query = LEFT(@query, LEN(@query) - 10)
--执行查询
EXEC(@query)

执行上述代码的结果将会是:

TableName    Count
Table1       3
Table2       6
Table3       4

通过使用动态SQL,我们可以将表名作为参数传递给SELECT语句,从而解决了在SQL Server中无法直接传递表名的问题。

0