2012-03-28 241 views
2

我在寫一個將客戶數據插入MSSQL數據庫的查詢。非常基本。插入「壞」數據到SQL數據庫?

INSERT INTO USERS(newid(),'BOB''S SELECT MARKETING') 

我確信可以逃避我的報價,但服務器仍然看到SELECT作爲保留關鍵字:

不幸的是,我想什麼時候做下面遇到了一個問題。我不想在括號中包裝一堆保留字。有沒有一種更簡潔的方式讓數據庫中的數據完好無損,而且不會被括號弄亂?

我感謝您的幫助。

謝謝!

+1

該字符串看起來非常非常錯誤。 – uvesten 2012-03-28 16:16:34

+0

@graysheep你如何執行對你的服務器? SSMS?客戶端應用程序?如果它是一個客戶端應用程序,我們可以看到該代碼嗎?如果你在SSMS中直接運行,會發生什麼? SQL Server中沒有任何東西可以防止你插入一個包含單詞「SELECT」的字符串,所以其他的東西是你的問題... – 2012-03-28 16:19:54

+2

@uvensten - 那個字符串是完全正確的''在'鮑勃'是SQL Server的正確方法是使用撇號(單引號)。我假設這是SQL Server由於標籤。如果它是另一個關係數據庫,那麼你可能會做些什麼。 – David 2012-03-28 16:20:38

回答

3

這裏有幾種語法可供選擇。使用代碼示例中的那個,您忘記了VALUES關鍵字。例如:

declare @users table 
(
    id uniqueidentifier, 
    name varchar(50) 
) 
insert into @users values (newid(), 'BOB''S SELECT MARKETING') 

您還可以使用INSERT INTO/select語句像下面,如果要插入一個值到表中的列的每一個:

declare @users table 
(
    id uniqueidentifier, 
    name varchar(50) 
) 
insert into @users 
select newid(), 'BOB''S SELECT MARKETING' 

或者你可以使用INSERT INTO/SELECT語句,並指定要插入的列:

declare @users table 
(
    id uniqueidentifier, 
    name varchar(50) 
) 
insert into @users (id, name) 
select newid(), 'BOB''S SELECT MARKETING' 
+1

你當然**應該**指定列名稱,但它不是先決條件,也不是OP插入失敗的原因。 – GarethD 2012-03-28 16:21:23

+0

是的,謝謝。當您評論它時,我已經在編輯我的回覆。 :) – 2012-03-28 16:27:47

+0

哇..謝謝:)我真的很尷尬,現在哈哈。 – graysheep 2012-03-28 16:44:24

4

你缺少的關鍵詞VALUES

INSERT INTO USERS VALUES (NEWID(),'BOB''S SELECT MARKETING'); 
+0

杜。爲什麼我沒有看到?接得好!還有用戶之後的空間 - 不確定是否重要,但你的觀點是正確的。 – David 2012-03-28 16:24:56