2017-05-04 9 views
0

パラメータ値を渡した後に動的選択ステートメントを印刷することは可能ですか?SELECT @ SQLを出力すると、パラメータ値なしのselect文だけが与えられます。動的選択ステートメントは、パラメータを渡した後に正しい出力を与えていません。しかし、私は直接selectステートメントに正しい出力を与えているパラメータ値を渡すとき。私の下のプロシージャを分割する関数は正常に動作しています の部分が働いていない正しく。値はSQLサーバーの動的クエリに渡されません

CREATE TYPE TableVariable AS TABLE 
(
    id int identity(1,1), 
    field_ids  INT, 
    value VARCHAR(MAX) 
) 


Alter PROCEDURE Testing 
(
    @TableVar TableVariable READONLY, 
    @Catalog_id INT 


) 
AS 
Declare @maxPK INT 
Declare @pk INT 
Declare @fid INT 
Declare @is_List SMALLINT 
Declare @val VARCHAR(MAX) 
Declare @field_Type VARCHAR(50) 
Declare @Where VARCHAR(MAX) 
Declare @SQL NVARCHAR(MAX); 
Set @pk = 1 
BEGIN 
    BEGIN TRY 
    SET NOCOUNT ON; 
    Select @maxPK = count(*) From @TableVar 
    SELECT @Catalog_id 
    Set @SQL = 'SELECT DISTINCT v1.entity_id from values v1 inner join listings l ON v1.entity_id = l.entity_id WHERE [email protected]_id' 

While @pk <= @maxPK 
BEGIN 


    SELECT @fid= field_ids FROM @TableVar where [email protected]; 
    SELECT @val= value  FROM @TableVar where [email protected]; 
    SELECT @field_Type=type,@is_List=is_list FROM FIELD WHERE [email protected] 
    IF (@is_List = 0) 
     BEGIN 
    SET @SQL += ' and exists (select 1 from values v'+convert(varchar(15),@pk+1)+' where v1.entity_id = v'+convert(varchar(15),@pk+1)+'.entity_id and v'+convert(varchar(15),@pk+1)+'[email protected] and(value IN(SELECT val FROM spliting(@val,'',''))))' 
    SELECT @fid 
     END 
    else IF (@is_List = 1 OR @field_Type = 'xy') 
     BEGIN 
     SET @SQL += ' and exists (select 1 from values v'+convert(varchar(15),@pk+1)+' where v1.entity_id = v'+convert(varchar(15),@pk+1)+'.entity_id and v'+convert(varchar(15),@pk+1)+'[email protected] and(value in(@val)))' 
     SELECT @fid 
     END 
    Select @pk = @pk + 1 

END 
EXECUTE SP_EXECUTESQL @SQL, N'@Catalog_id int,@fid int,@val varchar(max)',@[email protected]_id,@[email protected],@[email protected] 
SELECT @SQL 
END TRY 

    BEGIN CATCH 

    END CATCH 

END 
DECLARE @DepartmentTVP AS TableVariable; 
insert into @DepartmentTVP values(1780,'Smooth As Silk Deep Moisture Shampoo,Smooth As Silk Deeper Moisture Conditioner') 
--insert into @DepartmentTVP values(1780,'Smooth As Silk Deeper Moisture Conditioner') 
insert into @DepartmentTVP values(1782,'037-05-1129') 
insert into @DepartmentTVP values(2320,'["fairtrade","usda_organic","non_gmo_verified"]') 
SELECT * FROM @DepartmentTVP 
EXEC Testing @DepartmentTVP,583 

答えて

1

はい右なステートメントの前に:

EXECUTE SP_EXECUTESQL @SQL, N'@Catalog_id int,@fid int,@val varchar(max)',@[email protected]_id,@[email protected],@[email protected] 

タイプ:

print @SQL 
+0

これが私の元query.Valuesが手順でvalues.Butを返してquery.Itに直接渡されていますそうではない。 SELECT DISTINCT v1.entity_id値v1からの内部結合リストl ON v1.entity_id = l.entity_id WHERE l.c_id = 583で存在します(v1.entity_id = v2.entity_idおよびv2.field_id = 1780の値v2から1を選択し、 (値1)を選択し、v1.entity_id = v3.entity_idおよびv3.field_id = 2320の値v3から1を選択し、(値1(値は、 ( '["fairtrade"、 "usda_organic"、 "non_gmo_verified"]'))))))) – Ram

+0

印刷@sqlは動作していません。 – Ram

関連する問題