如何在没有while循环的sqlserver中进行迭代
我有一个临时表,表名很少,如下所示:如何在没有while循环的sqlserver中进行迭代,sql,sql-server,Sql,Sql Server,我有一个临时表,表名很少,如下所示: Id TableName ------------- 1 TableA 2 TableB 3 TableC 这些表名应该在显示的查询中被替换,并且应该被执行。我可以通过while循环来实现它,但我不想使用while。有没有其他的概念 我有以下SQL语句: SELECT TDU.ColHeader, TDU.ColValues FROM (SELECT ' + @ColumnsCasted +
Id TableName
-------------
1 TableA
2 TableB
3 TableC
这些表名应该在显示的查询中被替换,并且应该被执行。我可以通过while
循环来实现它,但我不想使用while。有没有其他的概念
我有以下SQL语句:
SELECT
TDU.ColHeader, TDU.ColValues
FROM
(SELECT
' + @ColumnsCasted + '
FROM
' + @TableName + ' ' +
@WhereCondition + ') TD
UNPIVOT
(ColValues FOR ColHeader IN (' + @ColumnsUnpivot + ')
) AS TDU;
SELECT * FROM [TableA]; SELECT * FROM [TableB]; SELECT * FROM [TableC];
@TableName
,@columnscated
,@columnsupvot
基于存储在临时表中的表名。我使用while循环迭代每个表名,并在语句中替换它
有人能推荐一种不使用while循环的方法吗?有一个非文档化的函数,用于对数据库中的每个表执行查询,也许它可以帮助您:
EXEC sp_MSforeachtable 'SELECT COUNT(*) FROM ?'
有一个非文档化的函数,用于对数据库中的每个表执行查询,也许它可以帮助您:
EXEC sp_MSforeachtable 'SELECT COUNT(*) FROM ?'
您可以尝试生成并执行动态SQL。下一个示例仅适用于
SELECT*fromtable
语句,您必须为查询更改它:
-- Create table
CREATE TABLE #TempTable (
Id int,
TableName nvarchar(50)
)
INSERT INTO #TempTable (Id, TableName)
VALUES
(1, 'TableA'),
(2, 'TableB'),
(3, 'TableC')
-- Dynamic SQL
DECLARE @stm nvarchar(max)
DECLARE @err int
SET @stm = N''
SELECT @stm =
@stm +
'SELECT * FROM ' +
QUOTENAME(TableName) +
'; '
FROM #TempTable
-- Statement execution
PRINT @stm
EXEC @err = sp_executesql @stm
IF @err <> 0 PRINT 'Error'
ELSE PRINT 'OK'
您可以尝试生成并执行动态SQL。下一个示例仅适用于
SELECT*fromtable
语句,您必须为查询更改它:
-- Create table
CREATE TABLE #TempTable (
Id int,
TableName nvarchar(50)
)
INSERT INTO #TempTable (Id, TableName)
VALUES
(1, 'TableA'),
(2, 'TableB'),
(3, 'TableC')
-- Dynamic SQL
DECLARE @stm nvarchar(max)
DECLARE @err int
SET @stm = N''
SELECT @stm =
@stm +
'SELECT * FROM ' +
QUOTENAME(TableName) +
'; '
FROM #TempTable
-- Statement execution
PRINT @stm
EXEC @err = sp_executesql @stm
IF @err <> 0 PRINT 'Error'
ELSE PRINT 'OK'
您是否可以添加一些示例输入,以便使问题更加清晰?没有(可能)基于集合的方法来做您想要做的事情,因此除了使用过程方法(while或cursor)之外,没有其他方法。这样做实际上也没有任何问题。您是否可以添加一些示例输入,以便使问题更加清晰?没有(可能)基于集合的方法来做您想要做的事情,因此除了使用过程方法(while或cursor)外,没有其他方法。这样做实际上也没有任何问题。它在内部使用游标。它在内部使用游标。