パラメータとして渡されたときに引用符で囲まれた識別子は暗黙的にキャストされますか?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-server-2014'です。構文と機能の相違は、しばしば答えに影響します。データベースソフトウェアを特定していません。 – HABO
リテラルが数値数字で始まっていない限り、sql-server-2014の 'EXEC'コールで引用符を使わなくてもうまく動作し、paramサイズとして与えられた10 ncharsに自動的に切り捨てられます。バグかどうかは、選択リスト項目が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