-1

次のように「スカラー変数 @facilities を宣言する必要があります」と表示される理由を誰かが説明できますか。しかし、作成した型の代わりに VARCHAR を使用するとうまくいきますか? どうすればこれを修正できますか?

ティア

--CREATE TYPE integer_list AS TABLE (n int NOT NULL PRIMARY KEY)

--DROP PROCEDURE spTestTVP

CREATE PROCEDURE spTestTVP (
    @facilities integer_list READONLY
    --@facilities varchar(100)
 )
AS
    DECLARE @sql nvarchar(4000)

    SET @sql = 'SELECT * FROM TestTable'

    SET @sql = @sql + ' WHERE 1=1 '

    IF @facilities IS NOT NULL 
        SET @sql = @sql + ' AND (FacilityNo IN (' + @facilities + ') OR FacilityNo IS NULL)'


    EXEC sp_executesql @sql
4

2 に答える 2

1

dynamicSQl ステートメントで物事を連結する場合、ステートメントを構築するすべての部分は varchar または nvarchar のいずれかである必要があります。それがSQLの限界です。

一方、テーブルを作成したため、動的SQLは必要ありません。

SELECT * FROM TestTable t
LEFT join @facilities f on f.n = t.facilityNO
于 2013-10-09T13:38:41.463 に答える