CREATE PROCEDURE ProcedureName1
@columnsname varchar(50),
@columnsvalue varchar(50)
AS
BEGIN
with cet as
(
Select ID,
names,
Null As address,
work,
note
From Tabl1
Where @columnsname Like @columnsvalue
Union All
Select t2.ID,
t2.name,
t2.address,
Null,
Null As tt
From Tabl2 As t2
Left Join Tabl1 As t1
On t2.ID = t1.ID
Where @columnsname Like @columnsvalue
)
Select *
From cet
Order By id,
note Desc,
cet.address
END GO
0
A
答えて
0
このような場合には、動的SQLを使用する必要があります。 @columnsname
の値をsys.columns
またはinformation_schema.columns
に対してホワイトリストに追加することをお勧めします。
sp_executesql
を使用して、@columnsvalue
をパラメータとして保持し、実行するSQLに連結しないでください。
create procedure ProcedureName1 (
@columnsname sysname --varchar(50)
, @columnsvalue varchar(50)
) as
begin
declare @sql nvarchar(max), @column_name sysname;
/* make sure the @columnsname is a valid column name */
set @column_name = (
select c.name
from sys.columns c
where c.object_id = object_id(N'Tabl1')
and c.name = @columnsname
);
set @sql = 'with cte as (
select
ID
, names
, null as address
, work
, note
from Tabl1
where '[email protected]_name+' like @columnsvalue
union all
select
t2.ID
, t2.name
, t2.address
, null
, null as tt
from Tabl2 as t2
left join Tabl1 as t1 on t2.ID = t1.ID
where '[email protected]_name+' like @columnsvalue
)
select *
from cet
order by
id
, note desc
, address;'
exec sp_executesql @sql, N'@columnsvalue varchar(50)', @columnsvalue
end;
go
参考:
+0
大変ありがとうございますSqlZim –
+0
@SrajMuneer助けて嬉しいです!参考資料を読んで、動的SQLには注意してください。 – SqlZim
関連する問題
- 1. Cosmos DBスクリプトエクスプローラのストアドプロシージャのパラメータとしてクエリを渡す方法
- 2. 一時テーブルをパラメータとして別のストアドプロシージャに渡す方法
- 3. EFストアドプロシージャにパラメータを渡す方法は?
- 4. execストアドプロシージャのパラメータを渡す方法
- 5. 私はこのストアドプロシージャにビュー名を渡す方法SQL Serverでストアドプロシージャに2014
- 6. UserとLogInをストアドプロシージャのパラメータとして渡す方法はありますか?
- 7. Delphiを使用してSQL Serverストアドプロシージャのパラメータ名を渡す
- 8. SQL Serverストアドプロシージャのパラメータを使用してテーブル名を渡す
- 9. JavaScriptでパラメータ名を渡す方法は?
- 10. Javaメソッドのパラメータとして配列を渡す方法は?
- 11. 引数名をパラメータとして渡す方法は?
- 12. Cでパラメータとして連続配列を渡す方法は?
- 13. android studioのパラメータとして変数名を渡す方法
- 14. SQL Anywhereはストアドプロシージャのパラメータとしてローを渡します
- 15. PHPでメソッド名をパラメータとして渡す方法
- 16. ストアドプロシージャにデータベース名を渡す方法
- 17. Informixのストアドプロシージャでパラメータを渡します。
- 18. テーブル名をパラメータとして持つストアドプロシージャ
- 19. XMLマルチレベルデータをパラメータとして渡してストアドプロシージャで使用する
- 20. ポータルのAzure CosmosDBでストアドプロシージャにパラメータを渡す方法
- 21. Entity FrameworkのDateTimeパラメータでストアドプロシージャを渡す方法
- 22. DataTableを現在のセッショントランザクションをコミットしないでストアドプロシージャのパラメータとして渡す方法はありますか
- 23. Spring Rest APIのパラメータとしてバイト配列を渡す方法
- 24. は、ストアドプロシージャにパラメータとしてループを渡します。
- 25. ストアドプロシージャのパラメータとしてファイルのパスを渡す
- 26. 名前なしパラメータをSqlCommand(ADO.NET)を介してストアドプロシージャに渡す方法はありますか?
- 27. 複数のレコードを返すストアドプロシージャにパラメータを渡す方法
- 28. テーブルに列を動的に追加しているときにストアドプロシージャのパラメータを渡す方法
- 29. 配列としてパラメータ名を取得する方法は?
- 30. - 型をパラメータとして渡す方法
私は*あなたが実際にそのようなあなたの手順を記述しないことを望む本当に*。それは判読不能な混乱です。そのメモで、あなたは質問をするのを忘れてしまった... – Siyual
値に対して任意の列をランダムにチェックしたいと仮定し、動的SQLなしでこれを行うことはできません。これに動的SQLを使用すると、SQLインジェクションが発生しやすくなります。 –
1)カラム名とテーブル名は "sysname"タイプです。 2)列名や表名が必要な変数は渡せません。 3)このようなものが本当に必要な場合は、動的SQLが唯一の方法です。 4)あなたはおそらくこのようなものを試してはいけないでしょう...あなたの要件を押し戻して再検討してください。これは素晴らしい考えではありません。悪いパフォーマンス、真剣にセキュリティの脆弱性。 – pmbAustin