一下是我sql存储过程ALTER PROCEDURE [dbo].[Pro_insertjudge]
-- Add the parameters for the stored procedure here
@sqlTable varchar(50), --表明 结尾加入逗号,否则会提示语法错误!!!!!
@sqlValues VARCHAR(1000) --插入的数据,如果是字符需要单引号,同时用逗号隔开
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @sqlan VARCHAR(1000)
SET @sqlan = 'INSERT INTO'+@sqlTable+'VALUES ('+@sqlValues+')'
EXEC (@sqlan)
END
一下是我执行存储过程
其中PPC表只有一列IDEXEC Pro_insertjudge
@sqlTable = 'PPC',
@sqlValues ='F001'但是系统老是提示我,“)”附近有语法错误。 我找不到具体出问题的地方,我是哪里错了呢?问题有些基础,因为我是新手,谢谢各位
顺便问个问题,加入我的PPC表有两列,分别为ID和Name,@qlValue='F001','李磊',我尝试过这么写,但是系统老是报错
必须传递参数 3,并以 '@name = value' 的形式传递后续的参数。一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递。请问这个是什么原因?
或者说@sqlValue 我怎么可以让他给拥有多列的表传值呢?
-- Add the parameters for the stored procedure here
@sqlTable varchar(50), --表明 结尾加入逗号,否则会提示语法错误!!!!!
@sqlValues VARCHAR(1000) --插入的数据,如果是字符需要单引号,同时用逗号隔开
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @sqlan VARCHAR(1000)
SET @sqlan = 'INSERT INTO'+@sqlTable+'VALUES ('+@sqlValues+')'
EXEC (@sqlan)
END
一下是我执行存储过程
其中PPC表只有一列IDEXEC Pro_insertjudge
@sqlTable = 'PPC',
@sqlValues ='F001'但是系统老是提示我,“)”附近有语法错误。 我找不到具体出问题的地方,我是哪里错了呢?问题有些基础,因为我是新手,谢谢各位
顺便问个问题,加入我的PPC表有两列,分别为ID和Name,@qlValue='F001','李磊',我尝试过这么写,但是系统老是报错
必须传递参数 3,并以 '@name = value' 的形式传递后续的参数。一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递。请问这个是什么原因?
或者说@sqlValue 我怎么可以让他给拥有多列的表传值呢?
解决方案 »
- SQL 2005级联修改删除的问题
- 两个字段的查询
- 为过程或函数 analysis 指定的参数太多
- 询问mssql是否自己带有安全策略
- 一直连不上局域网服务器上的sql2000,我详细叙述一下,请大家帮我看看,谢谢。
- 同时执行UPDATE和SELECT,是先请求到更新锁还是先请求到共享锁??
- Microsoft SQL Server 2005 用户'sa'登录失败(错误18456)
- 在一个项目中遇到的转换的问题
- MS SQL SERVER 6.5怎样重新生成数据库?
- 我怎样能够在一个SQLSERVER访问另一个SQLSERVER的表,就像ORACLE中的DBLINK
- SQL查询
- 请问根据 业务员访问记录 倒查 他联系过的客户资料这种SQL应该怎么写?
顺便问个问题,加入我的PPC表有两列,分别为ID和Name,@qlValue='F001','李磊',我尝试过这么写,但是系统老是报错
必须传递参数 3,并以 '@name = value' 的形式传递后续的参数。一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递。请问这个是什么原因?
或者说@sqlValue 我怎么可以让他给拥有多列的表传值呢?
GO
IF OBJECT_ID('test') IS NOT NULL
DROP TABLE test
GO
CREATE TABLE test(ID NVARCHAR(50) PRIMARY KEY,[Name] NVARCHAR(300))
GO
IF OBJECT_ID('[dbo].[Pro_insertjudge]') IS NOT NULL
DROP PROC [dbo].[Pro_insertjudge]
GO
CREATE PROCEDURE [dbo].[Pro_insertjudge]
@sqlTable varchar(50), --表明 结尾加入逗号,否则会提示语法错误!!!!!
@sqlValues VARCHAR(1000) --插入的数据,如果是字符需要单引号,同时用逗号隔开
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sqlan VARCHAR(1000)
SET @sqlan = 'INSERT INTO '+@sqlTable+' VALUES ('+@sqlValues+')'
PRINT @sqlan
EXEC (@sqlan)
END
GO
EXEC [dbo].[Pro_insertjudge] 'test','''F001'',''李磊'''
SELECT * FROM test
/*
ID Name
F001 李磊
*/
试了一下, 没问题的。
如果你还有问题, 最好像我这样, 给出完整的测试的代码。
ALTER proc [dbo].[sys_ExecNonQuery]
@sqls xml, --sql语句 xml样式 @data='<sqls>
--<sql>delete from ....</sql>
--<sql>insert ...</sql>
-- </sqls>'
@ResultVal int output --返回值,0 不成功 1成功
asdeclare @sql varchar(max),@id uniqueidentifier,@i intset @ResultVal=0Create table #tmp_ExecNonQuery(
FID uniqueidentifier,
FVar varchar(max)
)
Insert into #tmp_ExecNonQuery(FID,FVar)
select NEWID(),
T.c.value('./text()[1]', 'nvarchar(max)')
from @sqls.nodes('//sql') as T(c)select @i=COUNT(1) from #tmp_ExecNonQuerybegin try
begin tran;
--执行开始
WHILE exists(select * from #tmp_ExecNonQuery)
BEGIN
select @id=FID,@sql=FVar from #tmp_ExecNonQuery
exec (@sql)
delete from #tmp_ExecNonQuery where FID=@id
END
---执行结束
set @ResultVal=@i
commit tran
end try
begin catch -- 数据回滚
--将单据状态影响值数据回滚
--获取
--将单据状态影响值数据回滚 DECLARE @ErrorMessage NVARCHAR(4000),@ErrorSeverity INT,@ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
set @ResultVal=0
RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState )
rollback transaction
end catch