2011-06-08 44 views
0

目前使用MS SQL2000如果這有什麼區別。是否有更好的方式使用SQL以編程方式訪問表格

是否有更好的方法比下面的方法能夠以編程方式訪問表?

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 = ''[email protected]+'' 
) 
BEGIN 
    set @sql = 'select * from [' + @tableName + ']' 
    exec(@sql) 

end 

基本上我試着讓我只需要一個存儲過程的每個操作創建CRUD操作的簡單的映射工具,我可以在我的參數化的對象,一個表名通過,並讓數據庫做休息。這純粹是爲了我自己的個人教育,所以爲什麼我不使用一個既定的框架,所以如果我的想法或上面的代碼有任何重大問題,我會很感激。

感謝

回答

0

這是完整的例子創建一個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' 

希望它有幫助

+0

謝謝,我會給它一個去! – Matt 2011-06-08 13:57:19

+0

儘管在我需要插入記錄的情況下它並沒有幫助我。我想我不能有一個通用的尺寸適合所有的sproc那裏,因爲不同的對象會有不同數量的參數。回到繪圖板,我猜! – Matt 2011-06-08 14:56:52

+0

該SP僅適用於您可以作爲參數傳遞的表中的選定記錄。要確保插入記錄,您需要爲每種情況創建一個特定的SP,這是一種正常的做法。 – 2011-06-08 16:34:38