当前位置: 代码迷 >> Sql Server >> 小弟我在存储过程中想把表名,字段,值都用变量表示,为什么不行,请,多谢
  详细解决方案

小弟我在存储过程中想把表名,字段,值都用变量表示,为什么不行,请,多谢

热度:50   发布时间:2016-04-24 09:24:48.0
我在存储过程中想把表名,字段,值都用变量表示,为什么不行,请高手指点,谢谢

存储过程如下,我想把表名,字段,值都用变量表示,为什么不行,请高手指点,谢谢


ALTER PROCEDURE [dbo].[sp_Insert]
@tbName varchar(255), 
@strFields varchar(2000), 
@strValues varchar(8000)

AS 
declare @strSQL varchar(8000) 
begin
        SET NOCOUNT ON;
Insert into @tbName(@strFields)values(@strValues)
end 
------解决思路----------------------
你参考一下,动态执行
ALTER PROCEDURE [dbo].[sp_Insert]
@tbName varchar(255), 
@strFields varchar(2000), 
@strValues varchar(8000)
AS 
declare @strSQL varchar(8000) 
begin
SET NOCOUNT ON;
SET @strValues=REPLACE(@strValues,'''','''''')
EXEC('Insert into '+@tbName+'('+@strFields+')values('+@strValues+')')
end 

------解决思路----------------------
呃,你是问这个?

这个在语法上是不允许的,语法是要求有一定规距的,该关键字的地方要关健字,该对象名的地方就要对象名,标识符的地方目前还不支持用变量代替

至少目前SQL还做不到完全动态去处理用户的语句

我类举下,你要的那种情况
DECLARE @D VARCHAR(10)
SET @D='DECLARE'
@D @S VARCHAR(10)
SET @S='SET'
@D @E VARCHAR(10)
@S @E='='
@D @V VARCHAR(10)
@S @V@E'VARCHAR(10)'

@D @AL @V
SET @AL@E'ALERT'
--
如果能这样,以上的代码你看了是什么感觉~~
  相关解决方案