我想在SQL server中编写call语句 [英] I want to write call statement in SQL server

查看:578
本文介绍了我想在SQL server中编写call语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

得到一些错误

这里我的mysql代码我想写在sql server中



CREATE DEFINER =`root` @`localhost `PROCEDURE`sp_CallStatement`



IN vStmt VARCHAR(1000)



BEGIN

SET @sql = vStmt;

PREPARE s1 FROM @sql;

EXECUTE s1;

DEALLOCATE PREPARE s1;

结束$$



DELIMITER;





//错误/

消息137,级别15,状态1,过程sp_CallStatement,第8行

必须声明标量变量@sql。

消息102,级别15,状态1,过程sp_CallStatement,第11行

'PREPARE'附近的语法不正确。



我尝试过:



CREATE PROCEDURE [dbo]。[sp_CallStatement]

@Stmt VARCHAR(1000)

as

BEGIN

SET @sql = vStmt;

PREPARE s1 FROM @sql;

EXECUTE s1;

DEALLOCATE P. REPARE s1;

END

解决方案





DELIMITER;





//错误/

消息137,级别15,状态1,过程sp_CallStatement,第8行
必须声明标量变量@sql。

消息102,级别15,状态1,过程sp_CallStatement,行11

'PREPARE附近的语法不正确'。



我尝试了什么:



创建程序[dbo ]。[sp_CallStatement]

@Stmt VARCHAR(1000)

as

BEGIN

SET @sql = vStmt ;

PREPARE s1 FROM @sql;

EXECUTE s1;

DEALLOCATE PREPARE s1;

END

 Msg 137,Level 15,State 1,Procedure sp_CallStatement,Line 8 
必须声明标量变量@sql。

As错误消息说:你没有声明 @sql 所以它不知道如何处理它。



消息102,级别15,状态1,过程sp_CallStatement,行11 
'PREPARE'附近的语法不正确。

PREPARE不是SQL关键字:它不知道是什么你的意思是:保留关键字(Transact-SQL)| Microsoft Docs [ ^ ]

Prepare是PHP构造,而不是SQL。这让你的SP再次对SQL注入开放......


- 这个工作正在工作

创建程序[dbo] ]。[sp_CallStatement] 
@Stmt nvarchar(max)
as
BEGIN
SET NOCOUNT ON;
声明@sql nvarchar(max)
SET @ sql = @ Stmt
EXECUTE @Stmt;
结束
GO


Getting Some error
Here my mysql Code i want to write in sql server

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_CallStatement`
(
IN vStmt VARCHAR(1000)
)
BEGIN
SET @sql=vStmt;
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END$$

DELIMITER ;


//error/
Msg 137, Level 15, State 1, Procedure sp_CallStatement, Line 8
Must declare the scalar variable "@sql".
Msg 102, Level 15, State 1, Procedure sp_CallStatement, Line 11
Incorrect syntax near 'PREPARE'.

What I have tried:

CREATE PROCEDURE [dbo].[sp_CallStatement]
@Stmt VARCHAR(1000)
as
BEGIN
SET @sql=vStmt;
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END

解决方案



DELIMITER ;


//error/
Msg 137, Level 15, State 1, Procedure sp_CallStatement, Line 8
Must declare the scalar variable "@sql".
Msg 102, Level 15, State 1, Procedure sp_CallStatement, Line 11
Incorrect syntax near 'PREPARE'.

What I have tried:

CREATE PROCEDURE [dbo].[sp_CallStatement]
@Stmt VARCHAR(1000)
as
BEGIN
SET @sql=vStmt;
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END


Msg 137, Level 15, State 1, Procedure sp_CallStatement, Line 8
Must declare the scalar variable "@sql".

As the error message says: you don't declare @sql so it doesn't know what to do with it.

Msg 102, Level 15, State 1, Procedure sp_CallStatement, Line 11
Incorrect syntax near 'PREPARE'.

PREPARE is not an SQL keyword: it doesn't know what you mean: Reserved Keywords (Transact-SQL) | Microsoft Docs[^]
Prepare is a PHP construct, not SQL. Which leaves your SP wide open to SQL injection all over again...


--This one is working

CREATE PROCEDURE [dbo].[sp_CallStatement]
@Stmt nvarchar(max)
as
BEGIN
SET NOCOUNT ON;
Declare @sql nvarchar(max)
SET @sql=@Stmt
EXECUTE @Stmt;
END
GO


这篇关于我想在SQL server中编写call语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆