2
引用的標識符在作爲參數傳遞時被隱式轉換?TSQL:帶引號的標識符作爲參數投射
這似乎很奇怪,因爲它不適用於變量,並且在查詢中它們的處理方式完全不同。
CREATE PROC dbo.TestProc
(
\t @param nvarchar(10)
)
AS
BEGIN
\t SELECT @param
END
EXEC dbo.TestProc "foo"
EXEC dbo.TestProc 'foo'
SELECT "foo"
SELECT 'foo'
DECLARE @param NVARCHAR(10) = "foo"
Invalid column name 'foo'.
提示:使用適當的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。語法和功能的差異往往會影響答案。您尚未識別數據庫軟件。 – HABO
它甚至可以在sql-server-2014沒有引用'EXEC'調用的引用,除非文字以數字開始......並且它被無聲地截斷爲作爲參數大小給出的10個nchars。錯誤與否,確定selectlist項與exec調用中的參數值不是同一種類的標記。 EBNF從未完整發布過,但這可能有所幫助:https://msdn.microsoft.com/en-us/library/ms189499.aspx與https://msdn.microsoft.com/de-de/ library/ms188332(v = sql.120).aspx – dlatikay
這必須是TSQL解析器中的一個缺陷。它在這裏接受幾乎所有的字符串並將其轉換爲字符串,允許使用方括號,單引號和雙引號作爲分隔符,最令人驚訝的是,與標識符條件匹配的未加引號的字符串也以字符串結尾。沒有看到問題或如何被利用,但提出了一個錯誤。 – dlatikay