1

私はこのSqlパズルを持っています。私はSqlサーバー2005を使用しています

次のクエリは正常に機能します

 DECLARE @query VARCHAR(200)
 DECLARE @colname varchar(50) 
     CREATE TABLE #temp (ID INT IDENTITY PRIMARY KEY , value VARCHAR(50))
       INSERT INTO #temp VALUES ('first')
       SET @colname = 'myCol'
       SET @query = 'SELECT value AS' + @colname + ' FROM #temp'
        EXEC(@query)
     DROP TABLE #temp

しかし

私がこれをしたら

  SET @colname = (SELECT value FROM tablename WHERE id = 12) --valid selection 

また

  SELECT @colname = value FROM tablename WHERE id = 12 --valid selection 

結果が得られません。次のようなメッセージが表示されます。

  (1 row(s) affected)

AND エラー メッセージ:

  Msg 102, Level 15, State 1, Line 1
  Incorrect syntax near '1'.

このことで何が起こっているのかは誰でも知っています ありがとう

4

2 に答える 2

2

NULLコメントに従って、何も割り当てられていないか、列名が無効な SQL Server 識別子であるため、値を保護する必要があります。

@@ROWCOUNT前者は割り当て後にチェックすることで実行でき、2番目は次を使用して実行できますQUOTENAME

DECLARE @query VARCHAR(200)
DECLARE @colname VARCHAR(50)

CREATE TABLE #temp
  (
     ID    INT IDENTITY PRIMARY KEY,
     value VARCHAR(50)
  )

INSERT INTO #temp
VALUES      ('first')

SELECT @colname = QUOTENAME(value)
FROM   tablename
WHERE  id = 12

IF @@ROWCOUNT <> 1
  BEGIN
      RAISERROR('Unexpected rowcount',16,1)

      RETURN
  END

SET @query = 'SELECT value AS ' + @colname + ' FROM #temp'

EXEC(@query)

DROP TABLE #temp 
于 2013-02-14T14:20:51.393 に答える