存儲過程SQL用變量表名,你怎麼解決? ( 积分: 22 )

C

cnkf

Unregistered / Unconfirmed
GUEST, unregistred user!
存儲過程中我們常用SQL語句,每個SQL語句都會對於表名來處理的。
現在你能用變量作表名來使用實例如下:
CREATE PROCEDURE [GetTableList] @TableName Varchar(50),@ID Int AS
DECLARE @GetVal VARCHAR(50) -- 取值
Set @GetVal = (Select AutoID From @TableName Where ID=@ID) -- 將AutoID賦給@GetVal
Select @GetVal As AutoID

意思是我要執行這個存儲過程。
如:Exec GetTableList NewTable 要能執行這個,但不能出錯。
 
存儲過程中我們常用SQL語句,每個SQL語句都會對於表名來處理的。
現在你能用變量作表名來使用實例如下:
CREATE PROCEDURE [GetTableList] @TableName Varchar(50),@ID Int AS
DECLARE @GetVal VARCHAR(50) -- 取值
Set @GetVal = (Select AutoID From @TableName Where ID=@ID) -- 將AutoID賦給@GetVal
Select @GetVal As AutoID

意思是我要執行這個存儲過程。
如:Exec GetTableList NewTable 要能執行這個,但不能出錯。
 
To cnkf,
sysobjects 系统表里又说有表的记录 xtype字段为U为用户表
 
To 老人家:
  我不是取未知的表名,而是將已知的表名傳給存儲過程,然後存儲過程執行一個SQL語句。
 
请问楼主,表名怎么取的?做个循环不就好了?或者用游标
 
select * from sysobjects where xtype = 'U'
列出所有的用户表名,在一个一个的处理
 
SELECT @SQL=...
Exec (@SQL)
 
你好!但不 Set @GET=(Exec (@SQL) ) 執行。
 
如果为Oracle,使用运态SQL可以解决
 
CREATE PROCEDURE [GetTableList] @TableName Varchar(50),@ID Int
AS
DECLARE @GetVal VARCHAR(50),
@SQLTXT VARCHAR(100)
SET @SQLTXT='SELECT AutoID FROM '+@TableName+' WHERE ID='+@ID
SET @GetVal = EXEC(@SQLTXT)
SELECT @GetVal As AutoID
 
會出現錯誤:Error 156:Incorrect Syntax near the keyword 'EXEC'

問題還沒有解決,請大家繼續謝謝!!
 
CREATE PROCEDURE [GetTableList] @TableName Varchar(50),@ID Int,
@AutoID INT OUTPUT
AS
DECLARE @GetVal VARCHAR(50)
SET @AutoID='SELECT AutoID FROM '+@TableName+' WHERE ID='+@ID
EXEC GetTablelist Tablename,AutoID,@GetVal OUTPUT
SELECT @GetVal As AutoID
 
在檢查時正常,但執行時會出現錯誤:Could not find stored procedure 'select autoid from test where id=8'
 
我也碰到这个问题,在sql语法中如select,update,delete语法中表名不能为变量
 
应该是用 xianguo 的方法可以实现的,我以前用过,
 
Server 2000編程大全裡有具體說明,現在我也不記得了,你查一下吧。
 
收分了~~~~~~~~~~~~~~~~~
 
顶部