下面是一个例子;
我有一个数字列表(1,5,8,36),我想把这些值作为(临时)表行。其中一种方法是如下所示
select 1 as n into ##temp
union
select 5 as n
union
select 8 as n
union
select 36 as n问题是数字列表是动态的。它可以有任意的no个值。因此,我需要一种适当的系统方法来将这些值转换为临时表行。
发布于 2012-05-16 16:33:19
我经常使用的一种解决方案...
以VARCHAR(MAX)逗号分隔字符串的形式提供数字列表,然后使用人们在行中编写的众多dbo.fn_split()函数中的一个。
这是众多在线例子中的一个...SQL-User-Defined-Function-to-Parse-a-Delimited-Str
这些函数接受字符串作为参数,并返回一个表。
然后你可以做像这样的事情..。
INSERT INTO @temp SELECT * FROM dbo.split(@myList)
SELECT
*
FROM
myTable
INNER JOIN
dbo.split(@myList) AS list
ON list.id = myTable.id另一种方法是查看表值参数。它们允许您将整个表作为参数传递给存储过程。具体如何取决于您使用的框架。你使用的是.NET、Java、Ruby等语言吗?你是如何与数据库通信的?
一旦我们了解了应用程序代码的更多细节,我们就可以向您展示使用表值参数的客户端代码和SQL存储过程模板。
发布于 2012-05-22 06:59:47
您可以使用下面的查询来选择1到9之间的100随机值
Declare @Index Int = 1
Declare @Result Table (Col Int)
While @Index <= 100 Begin
Insert Into @Result (Col)
Select FLOOR( RAND() * 10)
Set @Index = @Index + 1
End
Select * From @Result发布于 2015-10-31 01:41:44
我将其用于一组通用的编号行。
SELECT DISTINCT ORDINAL_POSITION AS NUMBER_VAL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE ORDINAL_POSITION BETWEEN 1 AND 36
ORDER BY ORDINAL_POSITIONhttps://stackoverflow.com/questions/10614499
复制相似问题