查找传递的值的类型是select语句或csv,而不使用SQL预定义关键字

查找传递的值的类型是select语句或csv,而不使用SQL预定义关键字,sql,sql-server,select,stored-procedures,Sql,Sql Server,Select,Stored Procedures,请在此创建的过程中提供帮助,当执行此过程时,返回结果作为传递给参数的值,它是csv或它是选择 在这里,我使用like语句中的select,找出传递的值。在不使用任何sql关键字的情况下,我可以通过任何方式确定传递的参数值是csv还是select Create procedure TypeOfvalue (@abc varchar(max)) as begin IF (@abc like '%select%') begin Print 'It is select' End Else B

请在此创建的过程中提供帮助,当执行此过程时,返回结果作为传递给参数的值,它是csv或它是
选择

在这里,我使用
like
语句中的
select
,找出传递的值。在不使用任何sql关键字的情况下,我可以通过任何方式确定传递的参数值是csv还是
select

Create procedure TypeOfvalue
(@abc varchar(max))
as 
begin
IF (@abc like '%select%')
begin
    Print 'It is select'
End
Else 
Begin
    Print 'It is CSV'
End
第一:

Declare @abc varchar(max)
set @abc='1'
execute TypeOfvalue @abc
输出:“它是CSV”

第二:

Declare @abc varchar(max)
set @abc='select * from tbl1'
execute TypeOfvalue @abc
输出:“这是一个选择”

请注意,这是检查验证,这意味着有效的
SELECT
语句不是任何具有
SELECT
关键字的输入。

这也意味着输入对其他有效语句有效,如
UPDATE
INSERT
等。

您可以将
PARSEONLY
NOEXEC
选项结合使用。请参见以下代码示例:

CREATE PROCEDURE #TypeOfvalue (@code nvarchar(max)) AS
BEGIN

DECLARE @result int

BEGIN TRY
    EXEC(N'SET PARSEONLY ON;SET NOEXEC ON;'+@code+N';SET NOEXEC OFF;SET PARSEONLY OFF;')

    PRINT(N'Statement')
    SET @result = 1
END TRY
BEGIN CATCH
    PRINT(N'CSV')
    SET @result = 2
END CATCH

RETURN @result

END

GO
DECLARE @returnCode int

EXECUTE @returnCode = #TypeOfvalue @code = N'abc;'
SELECT @returnCode as returned -- 2 (CSV)

EXECUTE @returnCode = #TypeOfvalue @code = N'SELECT * FROM sys.all_objects'
SELECT @returnCode as returned

DROP PROCEDURE #TypeOfvalue -- 1 (SELECT)

我不太确定你想要什么。“没有任何sql关键字”是什么意思?为什么要避免它?我已经为我的工作代码示例提供了测试示例。只是一个提示,这仅适用于SQL Server 2012及更高版本。:-)谢谢,但我需要在甲骨文这就是为什么寻找一些通用的code@user2099433那么,把你的问题贴上甲骨文标签@RaduGheorghiu这就是为什么要寻找dsome的原因code@RaduGheorghiu我们可以在oracle中找到isnumeric等效项
CREATE PROCEDURE #TypeOfvalue (@code nvarchar(max)) AS
BEGIN

DECLARE @result int

BEGIN TRY
    EXEC(N'SET PARSEONLY ON;SET NOEXEC ON;'+@code+N';SET NOEXEC OFF;SET PARSEONLY OFF;')

    PRINT(N'Statement')
    SET @result = 1
END TRY
BEGIN CATCH
    PRINT(N'CSV')
    SET @result = 2
END CATCH

RETURN @result

END

GO
DECLARE @returnCode int

EXECUTE @returnCode = #TypeOfvalue @code = N'abc;'
SELECT @returnCode as returned -- 2 (CSV)

EXECUTE @returnCode = #TypeOfvalue @code = N'SELECT * FROM sys.all_objects'
SELECT @returnCode as returned

DROP PROCEDURE #TypeOfvalue -- 1 (SELECT)