0

我有两个带有单列的#temp 表我需要通过将一列转换为INT 来将这两列都转移到新的#temp 表中?

#ProductID
Pid
4
7
8
9
23
88


#Name
Name
tom
jerry
harry
jim
jack
jones

如何插入具有两列的新临时表并将#ProductID 列更改为 Int 数据类型?

新的临时表应如下所示:

#Temp1
Pid     name

4        tom

7       jerry

8       harry

9        jim

23     jack

88      jones
4

2 回答 2

0

如果表中没有排序键,则无法确保您可以按照插入的相同顺序检索那里的信息。

我假设您#Name以给定的顺序插入了信息,您希望保留以备将来使用。所以为了保持这个顺序,你应该identity column在桌子上有一个。

CREATE TABLE #Name 
(
     id INT IDENTITY(1,1),
     [Name] VARCHAR(100)
)

之后,您将能够将两个表合并为一个。

SELECT CONVERT(INT, Pid) AS nPid, [name]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY CONVERT(INT, Pid ) )as RN , Pid 
    FROM #ProductID) p
INNER JOIN #Name ON p.RN = id

由于 fiddle 的性质, Fiddle中的示例不能使用临时表,但除此之外完全如上。

于 2013-09-15T06:39:32.050 回答
0

假设在您的示例中 4 与“tom”一起使用,7 与“jerry”一起使用,并且您拥有 SQL Server 2005 或更高版本。您必须使用 ROW_NUMBER() 函数。

这基本上是你必须做的。根据您的两张桌子的种类,可能会略有偏差。

SELECT
    ProductID,
    name
INTO #Result
FROM
(
    SELECT
        Pid,
        ROW_NUMBER() OVER (ORDER BY Fake) AS RowID
    FROM
    (
        SELECT
            Pid,
            1 AS Fake
        FROM #ProductID
    ) InnP
) P
INNER JOIN
(
    SELECT
        Name,
        ROW_NUMBER() OVER (ORDER BY Fake) AS RowID
    FROM
    (
        SELECT
            Name,
            1 AS Fake
        FROM #Name
    ) InnP
) N ON N.RowID = P.RowID;

编辑:如果您的原始临时表不是 INT 类型,那么最终结果将需要 'CONVERT(INT, Pid) AS Pid'。我假设您还知道如何创建临时表,以防万一您在结果的“FROM”之前不知道,您可以添加“INTO #Whatever”或提前创建临时表和“INSERT INTO #Whatever” '。

编辑 2:显然 ROW_NUMBER() 不允许您按常量排序,因此查询变得更加复杂......

于 2013-09-13T18:37:13.400 回答