gpt4 book ai didi

sql-server - 带有不带引号的字符串参数的 SQL Server EXEC 是否有效?

转载 作者:行者123 更新时间:2023-12-04 02:55:29 27 4
gpt4 key购买 nike

我偶然调用了一个带有未加引号的字符串参数的存储过程。我预计会出现语法错误:

EXECUTE (Transact-SQL)

If the value of a parameter is an object name, character string, or qualified by a database name or schema name, the whole name must be enclosed in single quotation marks.

但这行得通:

CREATE PROC foobar @a VARCHAR(40) AS BEGIN SELECT @a END
go
EXEC foobar @a = abc

这让我很惊讶!我尝试了 SQL Server 版本 2008、2012 和 2016。我是否遗漏了什么或者这只是一个未记录的“功能”?

最佳答案

MS 知道,并且他们对 this post 发表评论暗示这是设计使然:

SQL Server automatically converts “single-word identifiers” to string literals if they are provided as NVARCHAR parameters in stored procedure calls. Therefore these statement will work fine:

EXEC dbo.TestProc foo
EXEC dbo.TestProc "foo"
EXEC dbo.TestProc [foo]

and they are equivalent to:

EXEC dbo.TestProc 'foo'

However, it does not convert identifiers to string literals in SELECT and assignments.

但是,我想不出任何适合使用它的情况(除了测试利用此功能的漏洞,或者编写代码来执行您希望提供完整语言支持的用户提供的查询因为,包括怪癖。

最好的建议是意识到这是可能的(所以你不排除它在编写测试/调试代码/检查潜在漏洞时工作的可能性),但不要在你的自己的代码。

关于sql-server - 带有不带引号的字符串参数的 SQL Server EXEC 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53321308/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com