如何在SQLServer2005中插入没有可写列的表?

如何在SQLServer2005中插入没有可写列的表?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,具体而言,我有一个具有以下签名的函数: CREATE FUNCTION [dbo].[GetLevelData]() RETURNS @level TABLE ( [Level] INT PRIMARY KEY IDENTITY, [Source Column Name] AS '{Option Level ' + CAST([Level] AS VARCHAR(10)) + '}', [Parent Column Name]

具体而言,我有一个具有以下签名的函数:

CREATE FUNCTION [dbo].[GetLevelData]()
RETURNS @level TABLE (
    [Level]                 INT PRIMARY KEY IDENTITY,
    [Source Column Name]    AS '{Option Level ' + CAST([Level] AS VARCHAR(10)) + '}',
    [Parent Column Name]    AS '[Parent_L' + CAST([Level] AS VARCHAR(10)) + '_Option]'
)

如何在不修改表定义的情况下将行插入到函数中

INSERT @level DEFAULT VALUES;
在待返回表中创建新行

要同时执行多行操作,可以执行以下操作:

CREATE FUNCTION [dbo].[GetLevelData]()
RETURNS @level TABLE (
    [Level]                 INT PRIMARY KEY IDENTITY,
    [Source Column Name]    AS '{Option Level ' + CAST([Level] AS VARCHAR(10)) + '}',
    [Parent Column Name]    AS '[Parent_L' + CAST([Level] AS VARCHAR(10)) + '_Option]'
)
AS
BEGIN
    WHILE ISNULL(SCOPE_IDENTITY(), 0) < 5    -- to end up with 5 rows
        INSERT @level DEFAULT VALUES

    RETURN
END
创建函数[dbo].[GetLevelData]()
返回@level表(
[级别]INT主键标识,
[Source Column Name]作为“{Option Level'+CAST”([Level]作为VARCHAR(10))+'}”,
[Parent Column Name]作为“[Parent_L'+强制转换([Level]作为VARCHAR(10))+”\u选项]”
)
作为
开始
而ISNULL(SCOPE_IDENTITY(),0)<5——以5行结束
插入@level默认值
返回
结束

这有点鬼鬼祟祟,但确实有效

+1谢谢。有没有办法不用while循环就可以多次这样做?我不这么认为,但你可以把它保持得很短(参见编辑)