什么東西像
SELECT 'DROP INDEX' || 'some other string'
意思?
我知道通常你在選擇后有列名,比如 SELECT first_name,但是當它在單引號中時是什么意思?我相信 || 表示連接字串。抱歉,我是新手,似乎找不到任何關于此的資訊。
編輯:對不起,我意識到我的問題不是很清楚。我的意思是問如果 SELECT 后跟一個單引號的 SQL 命令是什么意思?會不會有什么不同?它還會創建一個以 DROP INDEX 作為標題的列嗎?就像是
SELECT 'DROP INDEX' || 'some other string'
FROM ...
WHERE...
uj5u.com熱心網友回復:
選擇一個字串將回傳字串值。
SELECT 'string here'
將在這里回傳字串
|| 是concatenation 的簡寫。
SELECT 'string' || ' here'
將在此處回傳字串。
編輯: 選擇 SQL 命令將在訊息中回傳 SQL 命令。這通常在創建動態 SQL 并希望在執行之前驗證 SQL 命令時完成。如果將 SQL 命令放入 @sql NVARCHAR(max) 變數中,則可以 SELECT @sql 回傳查詢或 EXEC sp_executesql @sql 執行 SQL 命令(SQL Server 語法)。
uj5u.com熱心網友回復:
這里的想法是從資料庫元資料生成 SQL 陳述句,以便您可以將它們作為腳本執行。
但是,如果您使用字串連接運算子||來構造陳述句,則會面臨 SQL 注入的風險。
例如,要洗掉模式中的所有表,您可以生成一個腳本
SELECT 'DROP TABLE ' || table_schema || '.' || table_name
FROM information_schema.tables
WHERE table_schema = 'my_schema';
現在,如果碰巧有一個名為 的表My-Table,該腳本將失敗,因為它不是符合標準的 SQL 識別符號,必須用引號引起來。
這也不安全:
SELECT 'DROP TABLE "' || table_schema || '"."' || table_name || '"'
FROM information_schema.tables
WHERE table_schema = 'my_schema';
因為可能有一張名為silly"name.
通過制作名稱為 的表existing_table"; DROP TABLE "important,您可以濫用這樣的陳述句在資料庫中造成嚴重破壞。
避免字串連接并使用format:
SELECT format('DROP TABLE %I.%I', table_schema, table_name)
FROM information_schema.tables
WHERE table_schema = 'my_schema';
uj5u.com熱心網友回復:
SELECT name, 'is a human' AS Note FROM people
結果將是一個包含 2 列的表格:名稱和注釋。Name 是這個人的名字,Note 總是說“是一個人”。
|| 是邏輯 OR 運算子。
鏈接:
http://www.geeksengine.com/database/basic-select/literal-character-strings.php
http://www.geeksengine.com/database/basic-select/using-logical-operators.php
編輯:這不是問題,但 DROP INDEX 是一個 SQL 命令:https : //www.w3schools.com/SQL/sql_ref_drop_index.asp
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349933.html
標籤:sql PostgreSQL
下一篇:為什么默認INT(11)
