sql - 如何在 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]    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

这有点偷偷摸摸,但确实有效

关于sql - 如何在 SQL Server 2005 中插入没有可写列的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429705/

相关文章:

sql - 使用sql检测循环

SQL 单元测试存储过程

sql - 计数除以 0

sql-server - SSRS : repeat tablix left-most row group value on each row

sql-server-2005 - SQL 递归菜单排序

SQL Server : Select Top 0?

SQL: "Write Protect"行数据可能吗?

mysql - 选择计费小时数和非计费小时数

php - 选择 date=NOW()?

sql-server - 在 SQL 中导入或转换使用时区数据扩展的 ISO 8601 日期