TSQL:作为参数强制引用的标识符

时间:2016-08-18 15:55:26

标签: tsql parameters

作为参数传递时,引用标识符是否隐式转换?

这看起来很奇怪,因为它不适用于变量,在查询中它们的处理方式完全不同。



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'.

1 个答案:

答案 0 :(得分:0)

因为您将@param定义为nvarchar(10)类型,它只接受单引号引用的值(默认情况下),所以第二个命令(EXEC dbo.TestProc' foo')默认是正确的。如果不使用**

  

SET QUOTED_IDENTIFIER ON(默认情况下,它关闭)

**命令,两个单引号(不是双引号)用于转义单引号,如果你想让第二个exec命令工作,你必须设置SET QUOTED_IDENTIFIER,这允许使用双引号来指定性格,这意味着" foo"可以传递给nvarchar(10),并在结果窗口中显示foo(没有任何引号)因为无论单引号还是双引号都让sql知道哪一部分是你要分配的字符值参数

希望它有助于xD