作为参数传递时,引用标识符是否隐式转换?
这看起来很奇怪,因为它不适用于变量,在查询中它们的处理方式完全不同。
CREATE PROC dbo.TestProc
(
@param nvarchar(10)
)
AS
BEGIN
SELECT @param
END
EXEC dbo.TestProc "foo"
EXEC dbo.TestProc 'foo'
SELECT "foo"
SELECT 'foo'

DECLARE @param NVARCHAR(10) = "foo"
Invalid column name 'foo'.
答案 0 :(得分:0)
因为您将@param定义为nvarchar(10)类型,它只接受单引号引用的值(默认情况下),所以第二个命令(EXEC dbo.TestProc' foo')默认是正确的。如果不使用**
SET QUOTED_IDENTIFIER ON(默认情况下,它关闭)
**命令,两个单引号(不是双引号)用于转义单引号,如果你想让第二个exec命令工作,你必须设置SET QUOTED_IDENTIFIER,这允许使用双引号来指定性格,这意味着" foo"可以传递给nvarchar(10),并在结果窗口中显示foo(没有任何引号)因为无论单引号还是双引号都让sql知道哪一部分是你要分配的字符值参数
希望它有助于xD