这在SQL Server 2008中不起作用:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Run Code Online (Sandbox Code Playgroud)
错误是:
关键字"SET"附近的语法不正确.
我究竟做错了什么?
我通过编写代码而不是使用GUI在Microsoft SQL Server 2000中创建一个新表,我正在尝试学习如何"手动方式".
这是我实际使用的代码,它工作正常:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
Run Code Online (Sandbox Code Playgroud)
我已经自己指定了主键,外键和检查约束,因为这样我可以为它们定义一个名称,否则将它们声明为内联会使SQL Server生成一个随机名称,而我并不"喜欢"它.
当我尝试声明默认值约束时出现问题:查看Internet上的信息以及Microsoft SLQ Server Management Studio如何创建它,我了解它可以内联和单独创建:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
Run Code Online (Sandbox Code Playgroud)
要么
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Run Code Online (Sandbox Code Playgroud)
内联方法工作正常,但它像往常一样为constaint生成一个随机名称,独立方法抛出错误,说Incorrect syntax near 'FOR'..
此外,如果我创建表然后ALTER它,该命令工作:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" …Run Code Online (Sandbox Code Playgroud) 我已经写了下面提到的查询......
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name)
from dbo.[WorkflowInstanceParameter]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
Go
set @query = 'SELECT ' + @cols + '
from
(
select wi.Id,wip.Name, wip.stringValue
from FROM [ESP2_DEV1].[dbo].[WorkflowInstanceParameter] wip,
[WorkflowParameterGroupInstance] wpgi, [ESP2_DEV1].[dbo].[WorkflowInstance] wi,
dbo.WorkflowDefinition wd
where wip.[WorkflowParameterGroupInstanceId] = wpgi.id
and wpgi.[WorkflowInstanceId] =wi.id and
wi.workflowDefinitionId=wd.id
) x
pivot
(
max(stringValue)
for Name in (' + @cols + ')
) p '
execute(@query)
Run Code Online (Sandbox Code Playgroud)
但它失败并出现错误“关键字‘FOR’附近的语法不正确”
谁能帮我这个吗????