【问题标题】:Is there a better way to programatically access tables using SQL有没有更好的方法来使用 SQL 以编程方式访问表
【发布时间】:2011-06-08 20:23:43
【问题描述】:

如果这有什么不同的话,目前使用 MS SQL2000。

有没有比下面的方法更好的方法能够以编程方式访问表?

declare @tableName as varchar(50)
declare @sql varchar(4000)

set @tableName = 'User'

print @tableName

If EXISTS(
select TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_name = ''+@TableName+''
)
BEGIN
    set @sql = 'select * from [' + @tableName + ']'
    exec(@sql)

end

本质上,我试图为 CRUD 操作创建一个简单的映射工具,这样每次操作我只需要一个 Sproc,我可以传入我的参数化对象、一个表名,然后让数据库完成剩下的工作。这纯粹是为了我自己的个人教育,因此我为什么不使用已建立的框架,所以如果我的想法或上面的代码有任何重大问题,我也很感激知道。

谢谢

【问题讨论】:

    标签: tsql stored-procedures


    【解决方案1】:

    这是按照您的初始代码创建 SP 的完整示例:

    CREATE PROCEDURE dbo.CustomSelect (@tableName as varchar(50))
    AS 
    SET NOCOUNT ON
    DECLARE @sql varchar(4000)
    
    If EXISTS(
    select TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_name = @tableName
    )
    BEGIN
        set @sql = 'select 1 as Found, * from [' + @tableName + ']'
        exec(@sql)
    END
    ELSE
    BEGIN
        select 0 as Found
    END
    

    此 SP总是返回一个记录集,因此您可以检查 the value of the field FOUND 以了解该表是否存在

    用法:

    EXEC CustomSelect 'User'
    

    希望对你有帮助

    【讨论】:

    • 虽然它在我需要插入记录的情况下对我有帮助。我想我不能有一个通用的一种尺寸适合所有 sproc,因为不同的对象会有不同数量的参数。回到我猜那个的绘图板!
    • 此 SP 仅适用于可以作为参数传递的表中的选择记录。要插入记录,请确保您需要为每种情况创建一个特定的 SP,这是一种正常的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多