查找传递的值的类型是select语句或csv,而不使用SQL预定义关键字
请在此创建的过程中提供帮助,当执行此过程时,返回结果作为传递给参数的值,它是csv或它是查找传递的值的类型是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
选择
在这里,我使用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)