检查字符串是否为SQL Server保留关键字

4

有没有可能确定任何字符串是否是SQL Server保留关键字?

逻辑应该是这样的 -

IF @string is SQL Server Reserved Keywords
     RETURN 1
ELSE 
     RETURN 0

这是适用于 SQL Server 2000 的示例:http://www.novicksoftware.com/udfofweek/Vol2/T-SQL-UDF-Vol-2-Num-29-udf_SQL2K_IsKeywordBIT.htm - Tim Schmelter
是的,我在发问之前检查了那个。但似乎对于我的问题来说有些复杂。如果有简单的解决方案,我会很感激。 - AgentSQL
3个回答

3
这里是适用于SQL-Server 2000的函数:http://www.novicksoftware.com/udfofweek/Vol2/T-SQL-UDF-Vol-2-Num-29-udf_SQL2K_IsKeywordBIT.htm 这是SQL-Server 2012中的关键字:http://technet.microsoft.com/en-us/library/ms189822.aspx 因此,请将缺失的关键字添加到此函数中。
CREATE  FUNCTION dbo.udf_isKeywordBIT (

    @sWord as varchar(255)
)   RETURNS BIT -- 1 when @sWord is a keyword.

AS BEGIN 
    DECLARE @sWorking varchar(255)
    DECLARE @bitRC BIT
    -- We do UPPER incase we're working in a SQL 
    SET @sWorking = UPPER(LTRIM(RTRIM(@sWord)))
    SET @bitRC = CASE WHEN @sWorking
             in ( 
'ADD', 'ALL', 'ALTER', 'AND', 'ANY', 'AS', 'ASC', 'AUTHORIZATION'
, 'BACKUP', 'BEGIN', 'BETWEEN', 'BREAK', 'BROWSE', 'BULK', 'BY'
, 'CASCADE', 'CASE', 'CHECK', 'CHECKPOINT', 'CLOSE', 'CLUSTERED'
, 'COALESCE', 'COLLATE', 'COLUMN', 'COMMIT', 'COMPUTE', 'CONSTRAINT'
, 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CREATE'
, 'CROSS', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME'
, 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'DATABASE', 'DBCC'
, 'DEALLOCATE', 'DECLARE', 'DEFAULT', 'DELETE', 'DENY', 'DESC'
, 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOUBLE', 'DROP', 'DUMMY'
, 'DUMP', 'ELSE', 'END', 'ERRLVL', 'ESCAPE', 'EXCEPT', 'EXEC'
, 'EXECUTE', 'EXISTS', 'EXIT', 'FETCH', 'FILE', 'FILLFACTOR', 'FOR'
, 'FOREIGN', 'FREETEXT', 'FREETEXTTABLE', 'FROM', 'FULL', 'FUNCTION'
, 'GOTO', 'GRANT', 'GROUP', 'HAVING', 'HOLDLOCK', 'IDENTITY'
, 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IN', 'INDEX', 'INNER'
, 'INSERT', 'INTERSECT', 'INTO', 'IS', 'JOIN', 'KEY', 'KILL', 'LEFT'
, 'LIKE', 'LINENO', 'LOAD', 'NATIONAL', 'NOCHECK', 'NONCLUSTERED'
, 'NOT', 'NULL', 'NULLIF', 'OF', 'OFF', 'OFFSETS', 'ON', 'OPEN'
, 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPTION'
, 'OR', 'ORDER', 'OUTER', 'OVER', 'PERCENT', 'PLAN', 'PRECISION'
, 'PRIMARY', 'PRINT', 'PROC', 'PROCEDURE', 'PUBLIC', 'RAISERROR'
, 'READ', 'READTEXT', 'RECONFIGURE', 'REFERENCES', 'REPLICATION'
, 'RESTORE', 'RESTRICT', 'RETURN', 'REVOKE', 'RIGHT', 'ROLLBACK'
, 'ROWCOUNT', 'ROWGUIDCOL', 'RULE', 'SAVE', 'SCHEMA', 'SELECT'
, 'SESSION_USER', 'SET', 'SETUSER', 'SHUTDOWN', 'SOME', 'STATISTICS'
, 'SYSTEM_USER', 'TABLE', 'TEXTSIZE', 'THEN', 'TO', 'TOP', 'TRANSACTION'
, 'TRIGGER', 'TRUNCATE', 'TSEQUAL', 'UNION', 'UNIQUE', 'UPDATE'
, 'UPDATETEXT', 'USE', 'USER', 'VALUES', 'VARYING', 'VIEW'
, 'WAITFOR', 'WHEN', 'WHERE', 'WHILE', 'WITH', 'WRITETEXT')
THEN 1 ELSE 0 END
    RETURN @bitRC
END

GO

3
据我所知,没有内置的方法。您可以编写自己的函数,将字符串与文档中已知的保留字进行比较。
此列表可以在表格中保持动态,因此当它发生更改(例如针对不同版本的SQL Server)时,可以更新该表格。
此外,这种方式可以使用单个SELECT语句产生结果。

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接