下面是一個例子號碼列表轉換成(臨時)表;如何使用SQL(SQL Server)的
我有一個數字(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
問題是數字列表是動態的。它可以有任何沒有值。所以我需要一個適當的系統方式將這些值轉換爲臨時錶行。
下面是一個例子號碼列表轉換成(臨時)表;如何使用SQL(SQL Server)的
我有一個數字(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
問題是數字列表是動態的。它可以有任何沒有值。所以我需要一個適當的系統方式將這些值轉換爲臨時錶行。
我用了很多的溶液...
供應你的號碼爲VARCHAR(MAX)
逗號delimeted字符串列表,然後用那人都寫上線的衆多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存儲過程的模板,使用表值參數。
您可以使用下面查詢選擇100的隨機值從1到9
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
我使用一個通用的帶編號的行。
SELECT DISTINCT ORDINAL_POSITION AS NUMBER_VAL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE ORDINAL_POSITION BETWEEN 1 AND 36
ORDER BY ORDINAL_POSITION
如果你有更多的價值,添加更多的聯盟? – Andomar
我在尋找中獲得的SQL – Bala
UDF東西比N多UNION更好地分裂一個字符串,並返回一個表 - http://stackoverflow.com/a/2657/1016183 – Paddy