📜  SQL Server 中的 QUOTENAME()函数(1)

📅  最后修改于: 2023-12-03 15:20:15.296000             🧑  作者: Mango

SQL Server 中的 QUOTENAME()函数

在 SQL Server 中,QUOTENAME() 函数用于将标识符(如表名、列名等)括在方括号内以防止 SQL 注入攻击。

语法

QUOTENAME( 'string' [ , 'quote_character' ] )

  • string:需要用引号括起来的标识符(如表名、列名等)。
  • quote_character(可选):用于括起标识符的字符。默认情况下为方括号([])。
示例

示例 1:使用默认的方括号括起标识符。

SELECT QUOTENAME('SalesReport') AS QuotedName;  -- 返回 [SalesReport]

示例 2:使用不同的字符括起标识符。

SELECT QUOTENAME('SalesReport', '"') AS QuotedName;  -- 返回 "SalesReport"

示例 3:预防 SQL 注入攻击。

DECLARE @CustomerName nvarchar(50) = 'John''s Bike Shop';
DECLARE @SQL nvarchar(max) = N'SELECT * FROM Customers WHERE CustomerName = ' + QUOTENAME(@CustomerName, '''');
EXEC(@SQL);
注意事项
  • 在使用 QUOTENAME() 函数时,应该注意括起的标识符是否正确和完整,否则可能会引起语法错误。
  • 如果括起标识符的字符与标识符本身出现冲突,也可能导致 SQL 语句执行错误。此时可以使用其他可以用于括起标识符(如单引号、双引号等)的字符。
  • QUOTENAME() 函数不能解决所有的 SQL 注入攻击,因此在编写 SQL 语句时,仍然应该注意输入参数的安全性。