2010-12-08 39 views
0

我想創建一個過程,將返回一個給定的8位數字表單數據庫的「子數字」表。例如,數字54000000的孩子將是54100000,54009900 54000001等等。問題與sql函數

我的想法是聲明一個變量表(ParentPartTable),它只包含一個數字的'父'部分(表,不是一個值,因爲我們可以傳遞多個我們需要的孩子的數字)它上面會包含「54」,然後像做:

INSERT INTO @ReturnTable 
SELECT n.Symbol, n.Id 
FROM NumbersTable n 
JOIN @ParentPartTable p 
ON n.Symbol LIKE p.SYMBOL + '%'; 

不幸的是這似乎沒有工作。任何想法可能是錯的?

+0

如果你的數據是你認爲應該工作的。我很確定我以前使用過這樣的技術。 – 2010-12-08 13:01:02

+0

`n.Symbol`的數據類型是什麼? – thomaspaulb 2010-12-08 13:03:09

+0

我聲明它爲NCHAR(8) – matt99 2010-12-08 13:07:35

回答

1

This Works。

DECLARE @ParentPartTable TABLE 
(
SYMBOL VARCHAR(8) /*Don't use CHAR(8) here!*/ 
) 

INSERT INTO @ParentPartTable VALUES ('54'); 

WITH NumbersTable AS 
(
SELECT '54000000' AS Symbol, 1 AS Id 
) 

SELECT n.Symbol, n.Id 
FROM NumbersTable n 
JOIN @ParentPartTable p 
ON n.Symbol LIKE p.SYMBOL + '%'; 

您確定您沒有使用char(8)?因爲這將填補尾隨空格。

0

假設符號是兩個表中的數字,您需要將ti轉換爲LIKE clausule中的varchar。
ON n.Symbol LIKE cast(p.SYMBOL as varchar) + '%';應該工作。