iT邦幫忙

1
BEGIN
	Select @what_column from @source_table where @conditions;
END


@what_column 值是否不可以是這樣 >> "loginname,password", 而只可以是單一 column?
@conditions 也是不可以 multiple conditions 例如 "sex='M' and branch='NY'"?

@變數只可以是單一變數, 不可以是一整串 子statement ?

如果以上的stored procedure 想由 asp.net c# call procedure 是否可行?
如果這不是這樣 coding 該怎樣辦?
請各位大大指點一下小弟, 謝謝

多謝兩位, 小弟對 stored procedure 比較新手, allenlwh 是 mssql (transact-sql)寫法, 不好意思我沒有說出我是需要哪一種 sql 的寫法, 其實我想要的是 MySQL, 不過 allenlwh 使我意識到不可這樣直接將值放入變數內, 這豈不成了 sql injection ? 因此我再找 Google 大神 Search 一下..... 其實是不可這樣寫, 一定會有 syntax error 出現
MySQL 大約是這樣寫的

DECLARE what_column varchar, new_table varchar, source_table varchar, conditions varchar;

BEGIN
SET @ccmd = CONCAT('SELECT ',what_column,' INTO ',new_table,' FROM ',source_table,' WHERE ',conditions);
PREPARE ccStmt FROM @ccmd;
EXECUTE ccStmt;
DEALLOCATE PREPARE ccStmt;
END

因為如果這樣
Select @what_column from @source_table where @conditions;

Database Test Query 偵錯的時候 會停在 from @source_table 出現 syntax error (或是 source_table 不存在), Stored Procedure 是不允許有這樣的結構 statement

where @conditions 還沒有試會留意 sql injection 的問題, 稍後報匯

2 個回答

0
allenlwh
iT邦研究生 3 級 ‧ 2017-04-06 15:49:28

可在 C#內使用 EXECUTE sp_executesql
請參閱 https://msdn.microsoft.com/zh-tw/library/ms188001.aspx

0
石頭
iT邦研究生 3 級 ‧ 2017-04-07 08:14:56

Q:@what_column 值是否不可以是這樣 >> "loginname,password",而只可以是單一 column?
A:

Q:@conditions 也是不可以 multiple conditions 例如 "sex='M' and branch='NY'"?
A:如果你是說@conditions參數是否可以傳"sex='M' and branch='NY'",答案是不行可以的話就sqlInjection了!

Q:@變數只可以是單一變數, 不可以是一整串 子statement ?
A:可以一整串欄位的查詢,例如你的@what_column可傳多個查詢的欄位

Q:如果以上的stored procedure 想由 asp.net c# call procedure 是否可行?
A:可以妳可以看一下,ADO.NET呼叫procedure

一般來說都是傳要查詢的條件到stored procedure
例如:

BEGIN
	Select name from student where sex=@sex and branch=@branch
END

@sex和@branch由外部提供參數

你可以試試看

SELECT 'HELLO WORLD' 

SELECT是查詢結果
FROM是要在哪張表查詢
WHERE是給布林條件

以上如有錯誤再請其他大大糾正><

我要發表回答

立即登入回答