2012-03-28 201 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